从DOM获取文本,不包括脚本标记

时间:2017-09-28 13:40:45

标签: javascript jquery html

我想从以下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

4 个答案:

答案 0 :(得分:2)

好的,所以你编辑了你的问题。如果您要从页面中提取文本而不是script标签,则可以编写类似

的内容

&#13;
&#13;
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;
&#13;
&#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中删除所有脚本标记,最后获取文本内容。