我被告知不要使用element.innerHTML += ...
这样的东西来附加东西:
var str = "<div>hello world</div>";
var elm = document.getElementById("targetID");
elm.innerHTML += str; //not a good idea?
Run Code Online (Sandbox Code Playgroud)
这有什么问题?我还有其他选择吗?
我正在努力为我的问题找到一个干净的解决方案,并想知道是否有人可以提供一些提示.
我有"templates.html",其中包含一些HTML片段,我想将其加载到JavaScript中并使用.访问模板/片段的好方法是什么,记住templates.html不是加载的DOM文档?
我正在考虑使用document.open
创建DOM来访问,但我认为这在某些浏览器上存在问题.
我在Ajax中加载HTML,解析它DOMParser
并将所有childNodes
文档主体放入文档片段中.
当我将片段添加到当前文档的正文中时,<script>
不会执行标记.
我摆弄并想出如果我用新动态创建的脚本标签替换它们,它们就会被正确执行.
我想知道为什么?
例如
var html = "Some html with a script <script>alert('test');</script>";
var frag = parsePartialHtml(html);
fixScriptsSoTheyAreExecuted(frag);
document.body.appendChild(frag);
function fixScriptsSoTheyAreExecuted(el) {
var scripts = el.querySelectorAll('script'),
script, fixedScript, i, len;
for (i = 0, len = scripts.length; i < len; i++) {
script = scripts[i];
fixedScript = document.createElement('script');
fixedScript.type = script.type;
if (script.innerHTML) fixedScript.innerHTML = script.innerHTML;
else fixedScript.src = script.src;
fixedScript.async = false;
script.parentNode.replaceChild(fixedScript, script);
}
}
function parsePartialHtml(html) {
var doc = …
Run Code Online (Sandbox Code Playgroud)