我试图想出一个可重用的JS或jQuery函数,它允许我测试一个对象是否是另一个对象的DOM后代.
我见过一个测试模型
$b.parents('nodename').length>0
当您只需要通过该名称检查元素是否是任何节点的子元素时,这非常棒.
但是特定节点怎么样?你无法测试
$b.parents($a).length>0
因为jQuery父类将一个节点表达式作为参数进行过滤.
作为一个小背景,我试图测试文档点击事件的目标是否是特定对象的子项.例如,如果event.target是$ b的子节点,则返回true,否则返回false.但是这个功能可能会在以后产生其他影响.
谢谢!
a.contains(b)
这是一个使用Node.contains的纯JavaScript解决方案.该函数包含在内,a.contains(a)
计算结果为true.
IE9中有一个边缘情况:如果b
是文本节点,contains
则总是返回false.
在我建议的jQuery祖先使用jQuery对象
if ($(obj1).parents().index($(obj2)) >= 0) { // obj1 is a descendant of obj2 }