2010-06-07 62 views
2

是否有(對用戶不顯眼)用JavaScript獲取頁面中所有文本的方式?我可以得到HTML,解析它,刪除所有標籤等,但我想知道是否有辦法從已讀頁面獲取文本。有沒有辦法從JS呈現的頁面中獲取所有文本?

爲了澄清,我不想從選擇中抓取文本,我希望整個頁面。

謝謝!

+0

可能的重複:http://stackoverflow.com/questions/1879477/get-web-page-text-via-javascript – 2013-05-10 19:29:28

回答

3

我想你可以做這樣的事情,如果你不介意加載jQuery。

var theText; 
$('p,h1,h2,h3,h4,h5').each(function(){ 
    theText += $(this).text(); 
}); 

當它完成後,「theText」應該包含頁面上的大部分文本。添加我可能遺漏的任何相關選擇器。

+0

其實,這根本不是一個壞主意,我不認爲我會需要這些以外的任何文字...但是,這不會也拿起段落內的鏈接等? – 2010-06-07 04:06:41

+0

我認爲,因爲我們使用jQuery的text()方法,它知道爲我們去除這些額外的標籤。如果我們使用了html()方法,它肯定會攜帶錨標籤。 – 2010-06-07 04:11:20

+0

啊,謝謝你,我會試試。 – 2010-06-07 04:13:01

6

所有信貸Greg W's answer,我根據他的代碼,這個答案,但我發現了一個網站沒有內嵌樣式或腳本標籤這是一般簡單的使用方法:

var theText = $('body').text(); 

,因爲這抓起所有標籤中的所有文本都無需手動設置每個可能包含文本的標籤。另外,如果您不小心,手動設置標籤會傾向於在輸出中創建重複文本,因爲每個函數通常都需要檢查包含在其他標籤中的標籤,從而導致它抓取相同的文本兩次。使用一個包含我們想要抓取文本的標籤的選擇器可以避免這個問題。

需要注意的是,如果在身體標籤內有嵌入式樣式或腳本標籤,它也會抓住這些標籤。

更新:

閱讀this article about innerText後,我覺得現在來獲取文本的絕對最好的辦法是純醇香草JS:

document.body.innerText 

原樣,這是不可靠的跨瀏覽器,但在受控環境下它將返回最佳結果。閱讀文章瞭解更多詳情。

此方法以通常更易讀的方式格式化文本,並且不包含在輸出中包含樣式或腳本標記內容。

0

作爲對Greg W的回答的改進,您也可以刪除'undefined',並刪除任何數字,因爲他們不是這些詞語。

function countWords() { 

    var collectedText; 

    $('p,h1,h2,h3,h4,h5').each(function(index, element){ 
     collectedText += element.innerText + " "; 
    }); 

    // Remove 'undefined if there' 
    collectedText = collectedText.replace('undefined', ''); 

    // Remove numbers, they're not words 
    collectedText = collectedText.replace(/[0-9]/g, ''); 

    // Get 
    console.log("You have " + collectedText.split(' ').length + " in your document."); 
    return collectedText; 

} 

這可以拆分成單詞數組,單詞數;無論如何,真的。

相關問題