jQuery祖先使用jQuery对象

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

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

只是想看看一个元素是否是另一个元素的孩子,我想尽可能避免退回DOM领域。

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

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

来自#index参考 。

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

但是,使用jQuery ancestry插件 更快/更高效

沿着这些方向,parents()可选择接受一个选择器:

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

一种方法是使用过滤function

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

我想你也可以使用jQuery.inArray

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

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

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

试试这个:

 var someDiv = $('#div'); $('a').click(function() { if ($.inArray($(this).parents().get(), someDiv.get(0)) { alert('boo'); } } 
 var $element = $('a'); while ($element && !$element.is('someDiv')) { var $element = $element.parent(); };