我只想从以下HTML文档中获取文本,而没有<script>
TAG的内容?
<html>
<body>
<script>
a = 0;
</script>
<div>TEST</div>
<p>test</p>
</body>
</html>
我有以下代码:
$('body').text()
目前会得到结果:
a = 0; TEST test
,但我试图获得结果:
TEST test
好的,当您编辑问题时。如果您想从页面上提取文本,而不是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>
您可以使用JavaScript执行此操作,如先前的答案中所示:使用JS正则表达式从HTML中删除所有脚本标签
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>')
);
这可能不是一个完美的解决方案,但应该足以容纳简单的html页面:
$('<div>').html($('body').html()).find('script').remove().end().text()
说明:它创建一个div元素,将身体的HTML内容复制到其中,从DIV中删除所有脚本标签,最后获取文本内容。
首先,您可以使用以下代码获得所有'无脚本'元素:
var elements = $('#body').children().not('script');
现在您可以做以下内容以获取所有文本:
var text = elements.text();
但是,这将导致文本节点之间没有空间,即TESTtest
。如果这是您想要的,那就太好了,请在这里停下来。
但是,如果您想要空间,则可以循环元素并构建一个字符串:
var text = "";
elements.each(function(){
text += $(this).text() + " ";
});
text = text.trim();
请注意,此解决方案无法保持任何线路断裂,这是我根据您的问题所假设的。