-->

的DOMParser注入DOM,但一旦注入不适CSS样式表?(DOMParser injects D

2019-07-21 02:10发布

我有一个小测试用例了在:

http://jsfiddle.net/9xwUx/1/

代码归结为以下(给定的ID为“目标”的节点):

var string = '<div class="makeitpink">this should be pink, but is not</div>';
var parser = new DOMParser();
var domNode = parser.parseFromString(string,"text/xml");
document.getElementById("target").appendChild(domNode.firstChild);

如果您运行测试用例,然后检查通过萤火/ Chrome网上应用检查目标节点和选择的jsfiddle的iframe的body标签内的任何节点,并做“编辑为HTML”,任意位置添加一个随机charachter作为字符串[不是属性到れ,要清楚]和“保存”,将清新的风格。 但不是在这之前。 说我很困惑,是轻描淡写。

任何人都可以请澄清一下是怎么回事? 谢谢。

Answer 1:

您可以更改MIME类型text/html ,并做到以下几点:

var parser = new DOMParser()
var doc = parser.parseFromString(markup, 'text/html')
return doc.body.firstChild

我没有测试每个浏览器,但它适用于Chrome和Firefox。 我看不出有任何理由它不会在其他地方工作。



Answer 2:

有点晚了,但原因是你使用这些解析text/xml选项,这意味着结果是XML节点,不对其应用CSS。 当您右键单击并转到“编辑为HTML”浏览器重新诠释了他们作为HTML和元素中的变化将导致重绘,重新应用CSS。

我一直在使用解析我的相对劈十岁上下,但绝对工作创建临时元素和操作innerHTML属性,使浏览器做了解析,而不是方法:

var temp = document.createElement("div")
//assuming you have some HTML partial called 'fragment'
temp.innerHTML = fragment
return temp.firstChild

你在你的jsfiddle已经注意到。 基本上它归结为输出DOMParser是实例XMLDocument当您使用text/xml选项。



文章来源: DOMParser injects DOM but does not apply css stylesheets once injected?