我想做的:
- 在一个地方保存/复制HTML片段,粘贴到另一个地方,并将其反序列化为类似的DOM
现在如何进行序列化
- 在容器元素上调用
element.outerHTML
- 我也尝试过使用
new XMLSerializer().serializeToString(element)
与相同的结果
- 我也尝试过使用
的
当我序列化包含css的style
节点时:
.a > .b {
color: red
}
它们被序列化成
.a > .b {
color: red
}
这不是一个有效的CSS,因此不能被正确解析。
大号问题是我观察到的唯一一个问题,但它使我想知道其他潜在的序列化问题。
如何以不破坏其中的CSS的方式序列化样式节点?
因此,这似乎与在新文档上动态创建样式节点有关。
最简单的复制方法如下:
const doc = new Document()
const style = doc.createElement('style')
style.textContent = '.a>.b { color: red; }'
console.log(style.outerHTML)
生成<style>.a>.b {color:red}</style>
看起来,作为主动呈现文档的一部分,或者只是通常被添加到文档中,而不仅仅是使用它创建,对样式节点有一些副作用,这导致它被正确序列化。所以现在我用下面的方法来代替,这有点难看,但是可以工作:
const doc = new DOMParser().parseFromString('<html><head></head><body></body></html>', 'text/html')
const style = doc.createElement('style')
style.textContent = '.a>.b { color: red; }'
doc.body.append(style)
console.log(style.outerHTML)
doc.body.removeChild(style)
生成适当序列化的<style>.a>.b { color: red; }</style>
现在这解决了我的问题,但我仍然很想了解这里发生了什么更详细地说(例如,副作用究竟是什么,以及它是如何/何时触发的),所以我希望对此发表评论!