2009-12-10 206 views
2

是否有JavaScript語句可以從網頁中檢索內容/文本?通過javascript獲取網頁文本

+0

可能的重複:http://stackoverflow.com/questions/822452/strip-html-from-text-javascript – 2013-05-10 19:31:10

回答

1

這是一種奇怪的事情。你是指<p><span>之類的標籤或<title>之類的標籤?你確定你需要在JS中做這個,如果你正在刮一整頁?聽起來像一個XSS攻擊:P

副手,我不知道任何內置的,將做到這一點,但你總是可以寫一個函數來訪問DOM與document.getElementsByTagName和刮這樣的文字。

3

您可以使用Range s/TextRange s。這具有僅獲得頁面上的可見文本的優點(例如,與非IE瀏覽器中的元素的textContent屬性不同,其也將得到<script>的內容以及可能的其他元素)。以下內容適用於所有主流瀏覽器,儘管我無法保證不同瀏覽器之間換行符的一致性。

UPDATE 2012年11月

我不認爲這是一個好主意,這些天。雖然Selection現在被指定,its toString() method is not,並在一段時間(包括當微軟正在實施它的IE 9),它被指定爲像textContent行爲。對於這種特殊的方式,瀏覽器的一致性得到了更糟而不是更好,因爲2009年

function getBodyText(win) { 
    var doc = win.document, body = doc.body, selection, range, bodyText; 
    if (body.createTextRange) { 
     return body.createTextRange().text; 
    } else if (win.getSelection) { 
     selection = win.getSelection(); 
     range = doc.createRange(); 
     range.selectNodeContents(body); 
     selection.addRange(range); 
     bodyText = selection.toString(); 
     selection.removeAllRanges(); 
     return bodyText; 
    } 
} 

alert(getBodyText(window)); 
0

如果你只是想在頁面的HTML內容您目前使用的:

var html = document.getElementsByTagName('html')[0].innerHTML; 

如果你想另一個頁面的HTML谷歌「阿賈克斯」

1

如果你想刮的頁面來自同一個域,它是相當直接的。您只需使用AJAx將該頁面作爲文本獲取,然後從那裏找到您想要的內容。這裏有一個例子:

<script> 
    function ajax(url, callbackFunction) { 
    var request = new XMLHttpRequest(); 
    request.open("GET", url, true); 
    request.setRequestHeader("Content-Type", 
     "application/x-www-form-urlencoded"); 

    request.onreadystatechange = function() { 
     var done = 4, ok = 200; 
     if (request.readyState == done && request.status == ok) { 
     if (request.responseText) { 
      callbackFunction(request.responseText); 
     } 
     } 
    }; 
    request.send(); 
    } 

    var buttonClicked = function() { 
    ajax('/~jedi/index.html', getComplete); 
    } 

    var getComplete = function (text) { 
    alert(text); 
    } 
</script> 

<button onclick="buttonClicked()">Debug</button> 

如果頁面來自不同的領域,你的運氣了。你需要在服務器上這樣做。您可以使用IFrame從不同的域加載頁面上的數據(您可以通過編程方式創建一個不可見的IFrame),但由於安全策略,瀏覽器不允許您讀取該數據。