查找具有特定标记的父节点的最佳方式
Best way to find parent node with a specific tag?
我多年来在标准JS include中使用的这个函数有现代的等价物吗?
function getParentByTag(elem, lookingFor) {
var parent = elem.parentNode;
return parent.tagName === lookingFor ? parent : getParentByTag(parent, lookingFor)
}
我发现它在许多场景中都很有用,例如,查找td的父<table>
标签,或输入所在的<form>
元素,等等。
我会如下重写它,但概念是一样的:
function getParentByTag(elem, lookingFor) {
lookingFor = lookingFor.toUpperCase();
while (elem = elem.parentNode) if (elem.tagName === lookingFor) return elem;
}
您也可以将document.evaluate
与诸如ancestor::table
之类的xpath一起使用。在非常基本的性能测试中,这大约要贵50%。看起来是这样的:
function getParentByTag(elem, lookingFor) {
var result = document.evaluate(
`ancestor::${lookingFor}`,
elem,
null,
XPathResult.FIRST_ORDERED_NODE_TYPE,
null);
return result && result.singleNodeValue;
}
相关文章:
- 在自定义截面树中获取父节点
- 如何避免在取消选中子节点时取消选中父节点
- 如果未选中子节点,则未选中父节点
- 仅使用某些子节点访问xml中父节点的子节点
- 如何以编程方式在 jsTree 中选择一个节点并打开所有父节点
- 使用Javascript设置带有子节点的父节点的类's文本等于.
- 如何确定父节点是否有子节点
- Javascript在没有jQuery的情况下获取X父节点
- 如何从wijmo-flex网格的树视图中的节点转到父节点
- 在没有 jquery 的情况下更改子节点(父节点具有 ID)中的链接文本
- JQuery 选择父节点并更改其类名
- 如何删除javascript中的节点,而不需要父节点为null
- 如果未全部选中子节点,则取消选中父节点
- 如何在JavaScript中删除子节点触发点击事件时的父节点
- 获取下一个不工作Javascript DOM的同级父节点的子节点
- 取消绑定父节点和子节点
- jstree jquery插件-获取父节点的所有子节点和子节点
- 使用jquery检索父节点的子节点
- 如何在所有父节点上获取文件夹图标,在所有子节点上获取文件夹加图标(左侧的图标)
- 查找具有特定标记的父节点的最佳方式