我有div
id=content
,我想将它的innerHtml更改为字符串变量markup
,但我想禁用脚本标记。
例如,如果
markup='<b>Bold text here </b><i><script>alert("JS will be treated as normal text")</script></i>';
content
div应为
此处加粗文字 &lt; script&gt;提醒(“JS将被视为普通文字”)&lt; / script&gt;
我无法使用innerHTML
,因为它会运行警告框,我无法使用innerText
,因为其他标记将显示为普通文本。
我搜索了这个问题并找到了很多regix表达式。我对regix了解不多,但我找到的所有表达式都是删除所有标签,而不是禁用标签。
我不想使用jquery,即使我尝试使用.vla()
和.text()
也没有用。但现在我只想使用js。
我还希望它能够处理脚本标记的任何有效变体,包括:<Script>,
<sCrIPt>
,<script type= "text/javascript">
和</script >
答案 0 :(得分:2)
只需将<script>
的任何实例替换为<script&rt;
之类的内容,以便它不会呈现为标记,但会以HTML格式输出,就好像它是标记一样。
请考虑以下事项:
markup.replace(/<script>/gi, "<script&rt;");
您也可以对结束标记执行相同的操作:
// Replaces start and end tag
markup.replace(/<script>/gi, "<script&rt;").replace(/</script>/gi, "</script&rt;");
<强>更新强>
通过添加gi
,它使整个表达式不区分大小写。
答案 1 :(得分:2)
您可以使用replace()
函数简单地用转义版本替换脚本标记。但是,如果需要替换多个实例,则需要设置全局标志的正则表达式。因此,要替换脚本开始和结束标记,它将是:
var html = markup.replace(/<script[^>]*>/gi, "<script&rt;").replace(/<\/script[^>]*>/gi, "</script&rt;");
要替换结束标记,必须使用\/
来转义正斜杠,以便浏览器不会认为它正在关闭正则表达式模式。 &#39; i&#39; flag使其不区分大小写,因此使用大写和小写的组合并不重要。 [^>]*
表示它将匹配任何数量不是>
的字符(包括0)。因此,它将替换<script
和结束>
之间的任何字符。
答案 2 :(得分:1)
只需拨打一次replace
markup.replace(/<(\/?script)>/gi, '<$1>');
gi
标志使正则表达式不区分大小写(i
)和全局(g
),因此它可以替换模式的多个实例。
?
使前一个字符成为可选字符,在这种情况下,它可以匹配"<script>"
和"</script>"