我想从以下HTML文档中获取TEXT,而不包含<script>
标记的内容?
<html>
<body>
<script>
a = 0;
</script>
<div>TEST</div>
<p>test</p>
</body>
</html>
我有以下代码:
$('body').text()
目前得到结果:
a = 0; TEST test
但我想得到结果:
TEST test
答案 0 :(得分:2)
好的,所以你编辑了你的问题。如果您要从页面中提取文本而不是script
标签,则可以编写类似
let cloneBody = $('body').clone().find('script').remove().end();
console.log(cloneBody.text().trim());
&#13;
<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>
&#13;
答案 1 :(得分:1)
首先,您可以使用以下代码获取所有'none script'元素:
var elements = $('#body').children().not('script');
现在您可以执行以下操作来获取所有文本:
var text = elements.text();
但是,这将导致文本节点之间没有空格,即TESTtest
。如果这是你想要的那么好,停在这里。
但是如果你想要空格,你可以循环元素并构建一个字符串:
var text = "";
elements.each(function(){
text += $(this).text() + " ";
});
text = text.trim();
请注意,此解决方案不会保留任何换行符,这是我根据您的问题假设的。
答案 2 :(得分:0)
您可以使用javascript执行此操作,如上一个答案所示: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>')
);
答案 3 :(得分:0)
这可能不是一个完美的解决方案,但对于简单的html页面应该足够好了:
$('<div>').html($('body').html()).find('script').remove().end().text()
说明:它创建一个div元素,将body的html内容复制到其中,从div中删除所有脚本标记,最后获取文本内容。