jQuery祖先使用jQuery对象

时间:2008-10-28 23:18:53

标签: javascript jquery

我想使用两个jQuery对象来检查祖先。它们没有ID,只能用作jQuery对象(如果调用get(),则为DOM节点)。 jQuery的is()仅适用于表达式,因此这段代码是理想的但不起作用:

var someDiv = $('#div');

$('a').click(function() {
    if ($(this).parents().is(someDiv)) {
        alert('boo');
    }
}

只想查看一个元素是否是另一个元素的子元素,如果可能的话,我想避免退回到DOM域。

7 个答案:

答案 0 :(得分:12)

您可以使用index()方法检查列表中是否存在元素,以下是否有效?

var someDiv = $('#div');

$('a').click(function() {
    if ($(this).parents().index(someDiv) >= 0) {
        alert('boo');
    }
}

来自#index reference

答案 1 :(得分:10)

正如@Gareth建议的那样,检查(this).parents().index(someDiv) >= 0将会正常工作。

但是,使用jQuery ancestry plugin 方式更快/更有效

答案 2 :(得分:1)

沿着这些方向,parent()可选择接受选择器本身:

$('a').click(function() {
  if ($(this).parents("#div").length) {
    alert('boo');
  }
});

答案 3 :(得分:0)

一种方法是使用过滤功能

$('a').click(function() {
    $(this).parents().filter(function() {
       return this == someDiv[0];
    }).each(function() {
       alert('foo');
    })
}

我认为你也可以使用jQuery.inArray

if ($.inArray( someDiv, $(this).parents() ) ) {
        alert('boo');
}

答案 4 :(得分:0)

只是使用CSS选择器,你不会得到你想要的结果吗?

$( '#div a' ).click( function() { ... } );

答案 5 :(得分:0)

试试这个:

var someDiv = $('#div');

$('a').click(function() {
    if ($.inArray($(this).parents().get(), someDiv.get(0)) {
        alert('boo');
    }
}

答案 6 :(得分:0)

var $element = $('a');
while ($element && !$element.is('someDiv')) {
   var $element = $element.parent();
};