【问题标题】:Find text node after a node with XPath使用 XPath 在节点之后查找文本节点
【发布时间】:2016-03-10 22:03:24
【问题描述】:

我正在尝试使用document.evaluate 来查找与我的查询匹配的文本节点。我发现的问题是,使用我使用的 XPath,它没有找到跟随另一个元素的文本节点。例如,给定这些条件 (jsFiddle):

HTML

<div><p>$100</p></div>
<p>Test test <span>test</span> $100 test</p>

Javascript

var item,
  indx = 0,
  items = document.evaluate('//*[contains(text(),"$")]', document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);

while (item = items.snapshotItem(indx++)) {
  if (item.nodeName !== 'SCRIPT') {
    console.log(item.textContent);
  }
}

这个 XPath 只找到第一个 $,第二个没有找到,因为中间有 &lt;span&gt;

所以我的问题是如何更改 javascript(而不是 HTML)以找到两个匹配项?

【问题讨论】:

    标签: javascript html xpath


    【解决方案1】:

    将 XPath 表达式更改为 //*[text()[contains(.,"$")]],因为这会选择具有包含 $ 符号的文本子节点的元素。

    【讨论】:

    • 我在共享的小提琴中尝试了该更改,但我看到了这个错误:not a valid XPath expression
    • 我试过'*[contains(.,"$")]',但确实找到了这两个元素,但是如果你使用document,它会返回html元素,切换到document.body会返回最外层的包装器,不是最优的。
    • 抱歉,我忘记了结束],现在已编辑和更正。
    • 太棒了!非常感谢!
    猜你喜欢
    • 2019-04-11
    • 1970-01-01
    • 2016-09-19
    • 2010-09-20
    • 1970-01-01
    • 1970-01-01
    • 2011-02-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多