假设我有一段HTML代码字符串。我想使用jQuery从字符串中删除所有的
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'));
虽然这个问题有点老,但如果您仍然在寻找从字符串中删除脚本的最简单方法,请尝试
$.parseHTML(string);
$.parseHTML()自动从字符串中删除脚本标签。
编辑:
这是因为keepScripts
默认为false。(参考:$.parseHtml)
$.parseHTML(data, context, keepScripts)
parseHTML()
返回一个DOM元素数组,其中不包括脚本标签,但我想在不必将它们插入回文档的情况下进行连接。我正在尝试避免使用类似$().add()或append()这样的东西。 - ojosilva$('script').each(function () {
$(this).remove();
});
$('script').remove()
的意思是移除(删除)所有的 <script>
标签。 - Ryan Taylor如果想从任何字符串中删除脚本标签,这里是另一种解决方案:
var str = "<script>Content...</script>"
use var afterstring = str.replace("<script>","new");
and afterstring = str.replace("<\/script>","new");
希望这对你有用!
.remove()
是无用的。请参见此示例。 - David Rodrigues