如何在jQuery中检查元素是否在另一个元素中?

在JavaScript或jQuery中是否有任何直接的方法来检查元素是否在另一个元素中。

我不是指$(this).parent因为我希望找到的元素可以是元素树中较低的随机数。

举个例子,我想检查

是否在

 
(... close all divs ...)

所以在伪代码中:

  if($("div#THIS_DIV").isWithin("div#THIS_PARENT")) ... 

如果没有任何直接的方法我可能会为此做一个function但仍然值得问。

你可以这样做:

 if($('#THIS_DIV','#THIS_PARENT').length == 1) { } 

通过指定搜索的上下文 (第二个参数),我们基本上是说“在ID为#THIS_DIV的元素中#THIS_DIV ID为#THIS_DIV的元素”。 这是使用jQuery实现它的最简洁方式。

我们也可以这样写,使用find ,如果它对你更有意义:

 if($('#THIS_PARENT').find('#THIS_DIV').length == 1) { } 

或者像这样,使用parents ,如果你想从孩子向上搜索:

 if($('#THIS_DIV').parents('#THIS_PARENT').length == 1) { } 

任何这些应该工作正常。 length位是必要的,以确保“搜索”的长度> 0.我当然会建议你选择第一个,因为它是最简单的。

此外,如果您通过ID引用元素,则不必(尽管当然完全可以)在选择器前面添加标记名称。 但就速度而言,它并没有真正帮助,因为jQuery将在内部使用本机getElementById() 。 使用标记名称仅在按类选择时很重要,因为如果只有

元素具有特定类, div.myclass.myclass快得多。

使用jQuery> = 1.4(2010),您可以使用非常快速的函数jQuery.contains()

此静态方法适用于DOM元素,而不是jQuery元素,并返回truefalse

 jQuery.contains( container, descendant ) 

示例:要检查元素是否在文档中,您可以执行以下操作:

 jQuery.contains( document.body, myElement )