我正在尝试提供一个可重用的JS或jQuery函数,它允许我测试一个对象是否是另一个对象的DOM后代。
我见过
的测试模型$b.parents('nodename').length>0
当您只需要检查某个元素是否是该名称的任何节点的子节点时,这是非常棒的。
但是特定节点怎么样?你无法测试
$b.parents($a).length>0
因为jQuery父对象将nodename表达式作为参数进行过滤。
作为一个小背景,我正在尝试测试文档点击事件的目标是否是特定对象的子项。例如,如果event.target是$ b的子节点,则返回true,否则返回false。但是这个功能可能会在以后产生其他影响。
谢谢!
答案 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');
});