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

时间:2009-05-14 20:15:52

标签: javascript jquery

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

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

例如,我想检查< div id="THIS DIV">是否在< div id="THIS PARENT">内:

<div id="THIS_PARENT">
 <div id="random">
  <div id="random">
   <div id="random">
    <div id="THIS_DIV">
(... close all divs ...)

所以在伪代码中:

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

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

2 个答案:

答案 0 :(得分:49)

你可以这样做:

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

}

通过specifying a context进行搜索(第二个参数),我们基本上是说“在ID为#THIS_DIV的元素中查找ID为#THIS_PARENT的元素”。这是使用jQuery实现它的最简洁方式。

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

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

}

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

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

}    

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

另外,如果您通过ID引用元素,则不必(尽管当然完全可以)在选择器前面添加标签名称。但就速度而言,它并没有真正帮助,因为jQuery将在内部使用本机getElementById()。使用标记名称仅在按类选择时才重要,因为div.myclass.myclass要快得多,如果只有<div>元素具有特定类别的话。{/ p>

答案 1 :(得分:18)

使用jQuery&gt; = 1.4(2010),你可以使用非常快的函数jQuery.contains()

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

jQuery.contains( container, descendant )

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

jQuery.contains( document.body, myElement )