2016-03-10 85 views
0

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

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仅找到的第一个$,第二未发现因为在该<span>的中间。

所以我的问题是如何改变JavaScript(不是HTML)来找到两个匹配?

回答

2

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

+0

我试图改变我分享的小提琴,我看到这个错误:'不是有效的XPath表达式' – Mottie

+0

我试过''* [contains(。,“$”)]''两个元素*,但*如果使用'document',则返回'html'元素,并切换到'document.body'返回最外层的包装器,这不是最优的。 – Mottie

+0

对不起,我忘了关闭''',现在编辑和纠正。 –