我的标准JS包含了多年这个函数的现代等价物吗?
function getParentByTag(elem, lookingFor) {
var parent = elem.parentNode;
return parent.tagName === lookingFor ? parent : getParentByTag(parent, lookingFor)
}
我发现它在许多场景中很有用,例如:查找输入所在的td或<table>
元素的父<form>
标记等。
答案 0 :(得分:1)
我按如下方式重写,但概念是相同的:
function getParentByTag(elem, lookingFor) {
lookingFor = lookingFor.toUpperCase();
while (elem = elem.parentNode) if (elem.tagName === lookingFor) return elem;
}
您还可以将document.evaluate
与ancestor::table
等x路径一起使用。在非常基本的性能测试中,这大约高出50%。这看起来像这样:
function getParentByTag(elem, lookingFor) {
var result = document.evaluate(
`ancestor::${lookingFor}`,
elem,
null,
XPathResult.FIRST_ORDERED_NODE_TYPE,
null);
return result && result.singleNodeValue;
}