Javascript jQuery:在不执行脚本的情况下解析/操作HTML
我正在通过Ajax以以下格式加载一些HTML:Javascript jQuery:在不执行脚本的情况下解析/操作HTML,javascript,jquery,html,ajax,Javascript,Jquery,Html,Ajax,我正在通过Ajax以以下格式加载一些HTML: <div id="div1"> ... some content ... </div> <div id="div2"> ...some content... </div> ... etc. ... 一些内容。。。 …一些内容。。。 ... 等 我需要迭代响应中的每个div并分别处理它。为映射到id的每个div的HTML内容提供一个单独的字符串可以满足我的要求。但是,div可能包含脚本标记
<div id="div1">
... some content ...
</div>
<div id="div2">
...some content...
</div>
... etc.
... 一些内容。。。
…一些内容。。。
... 等
我需要迭代响应中的每个div并分别处理它。为映射到id的每个div的HTML内容提供一个单独的字符串可以满足我的要求。但是,div可能包含脚本标记,我需要保留这些标记,但不需要执行它们(稍后当我将HTML粘贴到文档中时,它们将执行,因此在解析过程中执行这些标记是不好的)。我的第一个想法是这样做:
// data being the result from $.get
var clean = data.replace(/<script.*?</script>/,function() {
// insert some unique token, save the tag, put it back while I'm processing
});
$('<div/>').html(clean).children().each( /* ... process here ... */);
//数据是$.get的结果
var clean=data.replace(/FYI,在任何JavaScript脚本中使用unescaped都会导致浏览器出现此问题。开发人员无论如何都必须逃避它,因此没有借口。因此,您可以“信任”它,这在任何情况下都会破坏
<body>
<div>
<script>
alert('<script> tags </script> are not '+
'valid in regular old HTML without being escaped.');
</script>
</body>
警报('tags not'+
“在常规的旧HTML中有效,但不转义。”);
看
要看到它断开。:在某些情况下,删除脚本标记会导致无效的html:
<html>
<head>
</head>
<body>
<p>This should be
<script type="text/javascript">
document.writeln("<b");
</script>>bolded</b>.
</body>
</html>
这应该是
writeln(“我想这意味着我的第一个解决方案是安全的。我不喜欢它,但它是有效的。
<body>
<div>
<script>
alert('<script> tags </script> are not '+
'valid in regular old HTML without being escaped.');
</script>
</body>
<html>
<head>
</head>
<body>
<p>This should be
<script type="text/javascript">
document.writeln("<b");
</script>>bolded</b>.
</body>
</html>