jquery,如何检查特定ID是否是其他ID的子项?

时间:2010-09-24 14:41:41

标签: javascript jquery

我有一个特定的id(“mysubid”),现在我想检查这个元素(这个id)是否在另一个id(“mymainid”)的子路径中。

是否有一种简单的方法可以执行此操作,或者我将逐个元素地向上查看元素是否在子路径中。

通过儿童路径,我说的是这样的事情:

A> B> C> d

所以D在A,B和C的子路径中

7 个答案:

答案 0 :(得分:10)

你们都让这变得非常复杂。使用descendant selector

if ($('#mymainid #mysubid').length) {
    // #mysubid is inside #mymainid
}

答案 1 :(得分:4)

var isInPath = $("#mysubid").closest("#mymainid").length > 0;

答案 2 :(得分:2)

  if( $("#mymainid").find("#mysubid").length > 0 )

答案 3 :(得分:1)

if($('#mysubid','#mymainid').length)
{

}

这会检查#mysubid是否在#mymainid

之内
jQuery( selector, [ context ] )
  • selector:包含选择器表达式
  • 的字符串
  • context:用作上下文的DOM元素,文档或jQuery

这只是$('#mymainid').find('#mysubid').lentgh btw的重叠,经过验证:http://github.com/jquery/jquery/blob/master/src/core.js#L162

另一个注意事项,使用$('#a #b')等方法使用Sizzle Selector女巫比执行$('#a',$('#b'))要慢,女巫使用纯粹的javascript getElementById

注意:因为如果找不到选择,jQuery默认返回一个空对象,你应该总是使用长度。

答案 4 :(得分:1)

如果要将整个链看作数组,请使用elm.parentNode并向后工作。因此,要回答PO​​J中的问题(以及元素之间的深度或距离),您可以使用:

var doc = document,
child = doc.getElementById("mysubid"),
parent = doc.getElementById("mymainid"),
getParents = function (elm) {
    var a = [], p = elm.parentNode;
    while (p) {
        a.push(p);
        p = p.parentNode;
    }
    return a;
};
getParents(child).indexOf(parent);

答案 5 :(得分:1)

我试过各种浏览器,下面的DOM函数比选择器方法(jQuery或document.querySelectorAll)快3到10倍

    function is(parent){
        return {
            aParentOf:function(child){
                var cp = child.parentNode;
                if(cp){
                    return cp.id === parent.id ? 
                       true : is(parent).aParentOf(cp);
                }
            }
        }
    }

如果A是D

的父级,则下面的调用将返回true
is(document.getElementById('A')).aParentOf(document.getElementById('D'))

只需拨打少量电话,我就会使用$('#A #D').length 对于非常频繁的调用,我会使用DOM。

答案 6 :(得分:0)

使用'is'方法实际上返回一个布尔值。

if($('#mymainid').is(':has(#mysubid)')) // true

走向另一个方向......

if($('#mysubid').parents('#mymainid').length) // 1