我想使用两个jQuery对象来检查祖先。它们没有ID,只能用作jQuery对象(如果调用get()
,则为DOM节点)。 jQuery的is()
仅适用于表达式,因此这段代码是理想的但不起作用:
var someDiv = $('#div');
$('a').click(function() {
if ($(this).parents().is(someDiv)) {
alert('boo');
}
}
只想查看一个元素是否是另一个元素的子元素,如果可能的话,我想避免退回到DOM域。
答案 0 :(得分:12)
您可以使用index()方法检查列表中是否存在元素,以下是否有效?
var someDiv = $('#div');
$('a').click(function() {
if ($(this).parents().index(someDiv) >= 0) {
alert('boo');
}
}
答案 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();
};