我有一个特定的id(“mysubid”),现在我想检查这个元素(这个id)是否在另一个id(“mymainid”)的子路径中。
是否有一种简单的方法可以执行此操作,或者我将逐个元素地向上查看元素是否在子路径中。
通过儿童路径,我说的是这样的事情:
A> B> C> d
所以D在A,B和C的子路径中
答案 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 ] )
这只是$('#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并向后工作。因此,要回答POJ中的问题(以及元素之间的深度或距离),您可以使用:
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
的父级,则下面的调用将返回trueis(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