Javascript 使用jQuery对象的jQuery祖先
我想使用两个jQuery对象检查祖先。它们没有ID,只能作为jQuery对象(如果调用Javascript 使用jQuery对象的jQuery祖先,javascript,jquery,Javascript,Jquery,我想使用两个jQuery对象检查祖先。它们没有ID,只能作为jQuery对象(如果调用get(),则可以作为DOM节点)使用。jQuery的is()仅适用于表达式,因此此代码非常理想,但不起作用: var someDiv = $('#div'); $('a').click(function() { if ($(this).parents().is(someDiv)) { alert('boo'); } } 我只是想看看一个元素是否是另一个元素的子元素,如果可能
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');
}
}
从。沿着这些线,parents()可以选择接受选择器本身:
$('a').click(function() {
if ($(this).parents("#div").length) {
alert('boo');
}
});
一种方法是使用filter函数
$('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() { ... } );
按照@Gareth的建议,检查(this).parents().index(someDiv)>=0
,效果会很好
但是,使用is方法更快/更有效尝试以下方法:
var someDiv = $('#div');
$('a').click(function() {
if ($.inArray($(this).parents().get(), someDiv.get(0)) {
alert('boo');
}
}
.parents()只接受最基本的选择器(即,只有描述单个元素的选择器才能工作,而不是描述ancetry的选择器,如“p strong”)。我简化了我的示例,因此在实际代码中,我使用存储的jQuery引用而不是字符串选择器获取父对象。非常感谢您!我会投你一票的,但我微薄的11分声誉让我无法这么做。谢谢!祖先插件和DOM方法的速度要快得多。
var $element = $('a');
while ($element && !$element.is('someDiv')) {
var $element = $element.parent();
};