在过去的几周里,我正在尝试用我自己的实现替换document.write,这样我就可以加载一些异步使用它的第三方JS。 我已经取得了一些进展,但document.write可能非常复杂。 我正在使用"DOMImplementation.createHTMLDocument(("创建一个空的HTML文档来解析初始html,而不是我将节点附加到真正的dom,并且在其中一些节点中有使用document.write的脚本标签。 为了处理这些调用,我首先尝试再次解析该 html 并将其附加到发起调用的脚本标记之后,但这种情况不处理部分 html ,例如:
document.write("<di");document.write("v></div>";
document.write("<scri");document.write("pt src='example.com></script>");
我可以将所有 HTML 推送到缓冲区并在脚本完成后刷新它,但我还需要处理更多情况,例如:
document.write("<div id='test1'></div>");document.getElementById("test1");
这在我的案件中将不存在。
任何想法如何可靠地处理文档.write?
顺便说一句:Node.querySelectorAll("*");
属性是否会以与它们在 DOM 中相同的顺序可靠地返回节点?例如:
document.body.querySelectorAll("*"); -->
<body>
<div id="test1">
<div id="test2">
<img id="img1">
</div>
<img id="img2">
</div>
</body>>
将始终输出 --> test1->test2->img1->img2
我不太明白你的问题,但我可以用document.innerHTML对document.write进行polyfill。
这是代码
document.innerHTML += text;