有没有人知道一种好的方法来测试一个存储在var中的元素是否是另一个元素的后代,也存储在var中?
我不需要element1.isChildOf('selector')
,这很容易
我需要element1.isChildOf(element2)
element2.find(element1).size() > 0
似乎不起作用。
我不想写一个插件使用.each
测试每个孩子,如果我可以避免它。
答案 0 :(得分:71)
如果您正在使用1.4,并且正在寻找后代而不是您的find()
示例所暗示的孩子,那么就有has()
方法:
element2.has(element1).length > 0
答案 1 :(得分:7)
您可以使用index()
。如果元素不在集合中,它将返回-1。假设element1
和element2
是DOM元素而不是 jQuery对象:
if ($(element2).children().index(element1) != -1) {
// it's a child
}
为了完整性,要测试某些东西是后代而不仅仅是一个孩子,它也可以用于它:
if ($(element1).parents().index(element2) != -1) {
// element1 is a descendant of element2
}
答案 2 :(得分:6)
从Jquery 1.6开始,您可以通过这种方式确定jquery对象是否是另一个jquery对象的子对象:
element2.is(element1.children());
另外值得注意的是,由于is()
现在接受了几个不同的参数(第一个参数可以是函数,jQuery选择器或DOM元素),你不能再认为它只是“是”,而是相反,“是或正在”。
答案 3 :(得分:1)
我知道这个帖子已经过时但如果你想向上检查而不是向下检查,这也有效:
function isElementChildOf(childElement, parentElement) {
return 0 !== $(childElement).parents(parentElement).length;
}
答案 4 :(得分:1)
如果element1是element2的子元素,那么这是true
,换句话说,element1有一个父元素,即element2
$(element1).parents(element2).length
如果父级有更多子级(let say they are input
's),则不正常:
$(element2).children(element1).length