2010-05-01 410 views
13

我正在尋找一種方法來在JS上對DOM樹執行全文搜索。用兩個詞,我想檢索包含給定字符串的文本節點列表。JS DOM:通過文本內容獲取元素

我試過mootools'Element.getElements (':contains[string]')但我不能讓它與包含空格的字符串一起工作。

編輯:jQuery和mootools似乎有他們的:contains運算符通過樹遍歷工作。這意味着沒有原生的方式來搜索頁面,這是正確的嗎?如果頁面很大,看起來效率很低,並且關於元素的唯一信息是要搜索的字符串。我錯了嗎?

我在考慮索引所有文本節點並檢查每個正在搜索的字符串的索引,但是在我的項目中,沒有辦法告訴DOM何時更新以便維護這樣的索引,至今。

有什麼更好的點子?

謝謝

回答

19

如果你有一個現代的瀏覽器,你可以隨時使用XPath,因爲它具有基於內容的搜索。

這是一個例子:

document.evaluate('//*[text()="' + string + '"]', document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE).snapshotItem(0); 

,並與舊的瀏覽器,你可以在喜歡的東西http://llamalab.com/js/xpath/

+0

我發現有必要在'XPathResult.ORDERED_NODE_SNAPSHOT_TYPE'之後添加一個額外的'null'。請參閱https://developer.mozilla.org/en-US/docs/Web/API/document.evaluate?redirectlocale=zh-CN&redirectslug=DOM%2Fdocument.evaluate – GKFX 2015-02-03 18:35:49

1

一般DOM墊片XPATH:對於DOM

//*[text()='anytext'] 
通過短信獲取元素

//*[.='anytext']