2017-09-28 41 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(); 

请注意,此解决方案不保持任何换行符,这是我根据你的问题假设。