在JavaScript中查找包含带有XPath的字符串的所有元素

时间:2016-04-25 16:40:33

标签: javascript regex string xpath

我正在尝试获取包含字符串的所有元素:

function getElementsByText( text, ctx) {
  return document.evaluate(
      "//*[.='"+text+"']", 
      ctx || document,
      null,
      XPathResult.ORDERED_NODE_ITERATOR_TYPE,
      null
    ).iterateNext();
}

var searchString = "Name";
var parents = getElementsByText(searchString);

for (var i = 0; i < parents.length; i++) {
  parents[i].style.opacity = .2;
};

文档说evaluate ORDERED_NODE_ITERATOR_TYPE返回“与表达式匹配的所有节点”。但getElementsByText仅返回第一次出现。

此代码不起作用,因为parents不可迭代。

我如何获得所有元素?

1 个答案:

答案 0 :(得分:2)

如果您调用evaluate方法,只要您想要所选节点集的下一个节点,就需要https://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult来调用iterateNext。如果你想拥有一个数组,那就行了。

function getElementsByText( text, ctx) {
  var results = [];
  var xpathResult = document.evaluate(
      "//*[.='"+text+"']", 
      ctx || document,
      null,
      XPathResult.ORDERED_NODE_ITERATOR_TYPE,
      null
    );
   var node;
   while ((node = xpathResult.iterateNext()) != null) {
     results.push(node);
   }
   return results;
}