2017-09-28 37 views
0

我想從以下HTML文檔中獲取TEXT ONLY,但沒有<script>標記的內容?從DOM中獲取文本,不包括腳本標記

<html> 
    <body> 
    <script> 
     a = 0; 
    </script> 
    <div>TEST</div> 
    <p>test</p> 
    </body> 
</html> 

我有以下代碼:

$('body').text() 

這目前得到的結果是:

a = 0; TEST test 

但我試圖得到的結果:

TEST test 
+2

我不知道你在這裏試圖解釋什麼 –

+0

我編輯了很多,但我認爲它清除了你的問題,隨時編輯它,如果我有什麼問題 – musefan

+0

你可以先刪除所有的腳本..他們都已經加載到內存中了。唯一的潛在問題是如果任何代碼使用某些模板或其他類似用途 –

回答

0

你可以使用JavaScript來做到這一點,如a所示以前的回答:Removing all script tags from html with JS Regular Expression

function stripScripts(s) { 
    var div = document.createElement('div'); 
    div.innerHTML = s; 
    var scripts = div.getElementsByTagName('script'); 
    var i = scripts.length; 
    while (i--) { 
     scripts[i].parentNode.removeChild(scripts[i]); 
    } 
    return div.innerHTML; 
    } 

alert(
stripScripts('<span><script type="text/javascript">alert(\'foo\');<\/script><\/span>') 
); 
2

好的,所以你編輯你的問題。如果您正在尋找提取網頁中的文本,但不script標籤,你可以寫類似

let cloneBody = $('body').clone().find('script').remove().end(); 
 
       
 
console.log(cloneBody.text().trim());
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<script> 
 
    var a = 1; 
 
</script> 
 
<p>Hello World</p> 
 
<div>This is a test run</div>

0

這可能不是一個完美的解決方案,但應該是簡單的HTML不夠好網頁:

$('<div>').html($('body').html()).find('script').remove().end().text() 

說明:它會創建一個div元素,複製體的HTML內容到它,從DIV刪除所有腳本標記,最後得到的文本內容。

1

首先,你可以得到所有用下面的代碼中的「無腳本」元素:

var elements = $('#body').children().not('script'); 

現在你可以只是執行以下操作來獲取所有文字:

var text = elements.text(); 

但是,這將導致文本節點之間沒有空格,即TESTtest。如果這就是你想要的那麼好,那就到這裏吧。

但是如果你想要的空間,你可以循環的元素,並建立一個字符串:

var text = ""; 
elements.each(function(){ 
    text += $(this).text() + " "; 
}); 
text = text.trim(); 

請注意,此解決方案不保持任何換行符,這是我根據你的問題假設。