找到具有特定标记的父节点的最佳方法?

时间:2016-01-04 11:52:47

标签: javascript dom

我的标准JS包含了多年这个函数的现代等价物吗?

function getParentByTag(elem, lookingFor) {
    var parent = elem.parentNode;
    return parent.tagName === lookingFor ? parent : getParentByTag(parent, lookingFor)
}

我发现它在许多场景中很有用,例如:查找输入所在的td或<table>元素的父<form>标记等。

1 个答案:

答案 0 :(得分:1)

我按如下方式重写,但概念是相同的:

function getParentByTag(elem, lookingFor) {
  lookingFor = lookingFor.toUpperCase();
  while (elem = elem.parentNode) if (elem.tagName === lookingFor) return elem;
}

您还可以将document.evaluateancestor::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;
}