如何使用JQuery从HTML代码字符串中删除所有的"script"标签?

18
假设我有一段HTML代码字符串。我想使用jQuery从字符串中删除所有的
4个回答

18
这应该适用于你:
var stringOfHtml = // your string here
$(stringOfHtml).find('script').remove();

要去掉脚本标签并获取新字符串:

var stringOfHtml = "<div><script></script><span></span></div>";
var html = $(stringOfHtml);
html.find('script').remove();

var stringWithoutScripts = html.wrap("<div>").parent().html(); // have to wrap for html to get the outer element

JS Fiddle 示例 - 由于使用 script 会破坏示例,所以使用了 p 标签代替,但原理相同。

实际可行的答案在这里(希望如此)

以下是解决 script 问题的方法,使用 replace 将脚本文本替换为其他内容(尝试使其唯一),然后删除这些新标记并再次使用 replace 将其替换回来,以防止脚本在文本中任何其他地方使用。是的,它确实使用了正则表达式,但并不是用于删除脚本标记,所以我希望这没关系;)

var stringOfHtml = "<p></p><script>alert('fail');</scr" + "ipt><span></span>";
var wrappedString = '<div>' + stringOfHtml + '</div>';
var noScript = wrappedString.replace(/script/g, "THISISNOTASCRIPTREALLY");
var html = $(noScript);
html.find('THISISNOTASCRIPTREALLY').remove();

alert(html.html().replace(/THISISNOTASCRIPTREALLY/g, 'script'));

JS Fiddle解决方法

带脚本文本的JS Fiddle示例


你如何获取生成的字符串? - nnnnnn
我猜 SO的问题是脚本在解析时执行,而.remove()是无用的。请参见此示例 - David Rodrigues
@DavidRodrigues 看来你是对的。我猜这不能在脚本上工作,但应该可以在任何其他标签上工作。 - Richard Dalton
4
这个答案很差。您的正则表达式将篡改任何包含单词“script”的字符串,无论它是标签还是其他内容。-1 - user67416
1
@g33kz0r 谢谢,不过我不确定你的意思。我已经添加了一个带有单词“script”的span示例fiddle,但它并没有被删除。 - Richard Dalton
显示剩余4条评论

13

虽然这个问题有点老,但如果您仍然在寻找从字符串中删除脚本的最简单方法,请尝试

$.parseHTML(string);  

$.parseHTML()自动从字符串中删除脚本标签。

编辑:

这是因为keepScripts默认为false。(参考:$.parseHtml

$.parseHTML(data, context, keepScripts)

2
工作得很好,但是我该如何将HTML重新连接成字符串?parseHTML()返回一个DOM元素数组,其中不包括脚本标签,但我想在不必将它们插入回文档的情况下进行连接。我正在尝试避免使用类似$().add()或append()这样的东西。 - ojosilva

1
我猜这应该可以工作。
$('script').each(function () {
    $(this).remove();
});

4
这相当于 $('script').remove() 的意思是移除(删除)所有的 <script> 标签。 - Ryan Taylor

1

如果想从任何字符串中删除脚本标签,这里是另一种解决方案:

var str = "<script>Content...</script>"
use var afterstring = str.replace("<script>","new");
and afterstring = str.replace("<\/script>","new");


希望这对你有用!

保留HTML,不做解释。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接