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(); };