javascript - 在 JavaScript 中使用 XPath 查找包含字符串的所有元素

标签 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 with ORDERED_NODE_ITERATOR_TYPE 返回“与表达式匹配的所有节点”。但 getElementsByText 仅返回第一个匹配项。

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

如何获取所有元素?

最佳答案

如果您调用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;
}

关于javascript - 在 JavaScript 中使用 XPath 查找包含字符串的所有元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36846342/

相关文章:

javascript - 当显示器屏幕分辨率不是方形时,如何绘制圆形而不是椭圆形?

javascript - 为什么 jQuery 'nth-child' 选择器在 GreaseMonkey (0.8) 中不起作用?

ruby - 在 Ruby 中找到两个字符串之间的第一个不同字符

JavaFX - 获取当前在 TextArea 中输入的单词

c# - 如何检查两个字符串是否在 C# 中部分匹配?

javascript - 使用audioplayer.js,想通过使用控件播放下一首轨道

javascript - 图表上的 d3 数据线迷失方向

正则表达式;删除所有标点符号,除了

regex - perl6 语法做替换

php - 从YouTube网址获取视频ID的模式