在JavaScript或Jquery中测试祖先/后代关系的对象

时间:2008-11-13 18:59:09

标签: javascript jquery dom

我正在尝试提供一个可重用的JS或jQuery函数,它允许我测试一个对象是否是另一个对象的DOM后代。

我见过

的测试模型
$b.parents('nodename').length>0

当您只需要检查某个元素是否是该名称的任何节点的子节点时,这是非常棒的。

但是特定节点怎么样?你无法测试

$b.parents($a).length>0

因为jQuery父对象将nodename表达式作为参数进行过滤。

作为一个小背景,我正在尝试测试文档点击事件的目标是否是特定对象的子项。例如,如果event.target是$ b的子节点,则返回true,否则返回false。但是这个功能可能会在以后产生其他影响。

谢谢!

3 个答案:

答案 0 :(得分:22)

a.contains(b)

这是一个使用Node.contains的纯JavaScript解决方案。该函数包含在内,a.contains(a)的计算结果为真。

IE9中有一个边缘情况:如果b是文本节点,contains将始终返回false。

答案 1 :(得分:13)

jQuery ancestors using jQuery objects我建议

if ($(obj1).parents().index($(obj2)) >= 0) {
    // obj1 is a descendant of obj2
}

答案 2 :(得分:2)

试试这个:

$('#foo').filter(function(){

   return $(this).parent().is('#foo-parent');

});

所以这里我们选择所有foo元素,然后只过滤那些将foo-parent作为其直接父元素的元素。

如果您想查找当前对象的任何祖先是否符合规则,那么我想它应该是:

$('#foo').filter(function(){

   return $(this).parents().is('#foo-parent');

});