Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用jQuery对象的jQuery祖先_Javascript_Jquery - Fatal编程技术网

Javascript 使用jQuery对象的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'); } } 我只是想看看一个元素是否是另一个元素的子元素,如果可能

我想使用两个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');
    }
}
从。

沿着这些线,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();
};