jQuery测试element1是否为element2的后代

时间:2010-03-08 01:36:49

标签: jquery

有没有人知道一种好的方法来测试一个存储在var中的元素是否是另一个元素的后代,也存储在var中?

我不需要element1.isChildOf('selector'),这很容易 我需要element1.isChildOf(element2)

element2.find(element1).size() > 0似乎不起作用。

我不想写一个插件使用.each测试每个孩子,如果我可以避免它。

5 个答案:

答案 0 :(得分:71)

如果您正在使用1.4,并且正在寻找后代而不是您的find()示例所暗示的孩子,那么就有has()方法:

element2.has(element1).length > 0

答案 1 :(得分:7)

您可以使用index()。如果元素不在集合中,它将返回-1。假设element1element2是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;
}

这是working example

答案 4 :(得分:1)

如果element1是element2的子元素,那么这是true,换句话说,element1有一个父元素,即element2

$(element1).parents(element2).length 

如果父级有更多子级(let say they are input's),则不正常

$(element2).children(element1).length