使用document.write与逐节点生成dom节点时的不同CSS继承

时间:2016-12-01 10:35:30

标签: javascript html css dom iframe

昨天我发布了一个不同的(相关的)问题: CSS height 100% behaves different when embedded in iframe

对此的回答使我将doctypes看作是发生的事情的潜在原因。但是我现在开始认为某些事情更加险恶。

按节点创建iframe节点并使用

设置doctype时
document.implementation.createDocumentType("html", "", "")

内容呈现方式与使用

呈现完全相同的内容时不同
document.write("<!DOCTYPE html>")

请在此处查看jsfiddle:https://jsfiddle.net/570qvk2p/3/

在我看来,创建第一种方式的doctype可能不会被其他DOM / CSS以同样的方式尊重。

关于这里发生了什么以及如何解决这个问题的任何想法都将非常感激。不幸的是,我的DOM必须逐个节点地构建,从文档类型开始 - 我无法改变这一事实。

我本质上是在尝试复制以前渲染的DOM树,并且这种类型的显示错误显然是我想要避免的。原始DOM的呈现方式与使用document.write呈现时的外观相同。

1 个答案:

答案 0 :(得分:3)

<iframe></iframe>创建一个文档。由于没有doctype,因此承诺使用quirks模式。将documentType节点添加到文档中并不会更改此承诺。

您的document.write()代码会删除旧文档并创建一个新文档。在开始时编写<!DOCTYPE html>会将新文档置于标准模式。