2016-03-10 82 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

對不起,我忘了關閉''',現在編輯和糾正。 –