如何使用JQuery删除HTML字符串中的所有"脚本"标记?

use*_*495 14 html javascript jquery

假设我有一串HTML代码.我想使用JQuery <script>从字符串中删除所有标记.

我怎样才能做到这一点?

注意:我想使用JQuery而不是REGEX来执行此操作.

这有用吗? $(var).find('script').remove();

Ric*_*ton 13

这应该适合你:

var stringOfHtml = // your string here
$(stringOfHtml).find('script').remove();
Run Code Online (Sandbox Code Playgroud)

要删除脚本标记的新字符串:

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
Run Code Online (Sandbox Code Playgroud)

JS小提琴示例 - 不得不使用p而不是脚本作为脚本打破小提琴,但同样的原则.

这里的实际工作答案(希望如此)

以下是脚本问题的解决方法,使用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'));
Run Code Online (Sandbox Code Playgroud)

JS Fiddle解决方法

JS小提琴示例与脚本文本

  • 这个答案很糟糕.你的正则表达式将会包含任何包含单词"script"的字符串,无论这是否是一个标记.-1 (4认同)

Far*_*ini 9

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

$.parseHTML(string);  
Run Code Online (Sandbox Code Playgroud)

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

编辑:

这是有效的,因为keepScripts默认值为false.(参考:$ .parseHtml)

$.parseHTML(data, context, keepScripts)
Run Code Online (Sandbox Code Playgroud)

  • 效果很好,但如何将 html 重新加入字符串?`parseHTML()` 返回一个排除脚本标签的 DOM 元素数组,但我想加入而不必将它们重新插入到文档中。我试图避免使用 $().add() 或 append() 之类的东西 (2认同)