从DOM中获取文本,排除脚本标签



我只想从以下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();

请注意,此解决方案无法保持任何线路断裂,这是我根据您的问题所假设的。

最新更新