样式innerHTML

Posted

技术标签:

【中文标题】样式innerHTML【英文标题】:Style innerHTML 【发布时间】:2013-09-16 02:04:08 【问题描述】:

我试图了解样式标签在与 innerhtml 一起使用时的行为。

我做了 3 个实验:

样式与现有规则,innerHTML 插入其他选择器规则

结果:两条规则都适用。演示:http://jsfiddle.net/Tcy3B/

样式与现有规则,innerHTML 插入相同的选择器规则

结果:新规则被忽略。演示:http://jsfiddle.net/Tcy3B/1/

空样式,innerHTML插入一个规则,然后另一个innerHTML插入另一个规则

结果:第二条规则覆盖第一条。演示:http://jsfiddle.net/Tcy3B/2/

谁能解释一下逻辑?这在我看来完全是随机的,有时第二个规则会添加到第一个规则中,有时会被忽略,有时会覆盖第一个规则。

背景:想法是构建依赖 css 而不是 javascript 的动态 UI,如 full text search example 所示。

例如,这里是第二个demo的代码:

html:

<style type="text/css">
  .red color:red;
</style>
<div class="red">red</div>
<div class="blue">blue</div>

JavaScript:

var st=document.getElementsByTagName("style")[0];
st.innerHTML=".red color:blue;";

【问题讨论】:

好问题。我也想知道同样的事情。 @Asad 好吧,我的错误也是 :-( 这只是一个 jsfiddle 行为,如果我给样式表一个 id,那么一切都会按预期工作,innerHTML 会覆盖以前的规则。投票结束此事. @Christophe 是的,这是真的。您可能应该将其发布为答案,因为它解释了正在发生的事情。 【参考方案1】:

作为一个粗略的直观经验法则,注意innerHTML 旨在与 HTML 一起使用可能很有用,但您将其应用于 CSS时间>。如果您尝试使用innerHTML 修改script 元素,您可能会遇到类似的“有趣”问题。

动态修改样式规则集的更好接口是document.styleSheets。 W3 联盟对此here 有一个有用的概述。

【讨论】:

样式元素是html。您引用的链接(为此 +1)在样式元素上使用了诸如 innerHTML 和 getElementById 之类的方法。【参考方案2】:

这很有趣。

似乎当您在&lt;style&gt;&lt;/style&gt; 标签中已经加载了一个样式时,它会在您写入&lt;style&gt; 标签的.innerHTML 后保留它。但是,每次您写信给.innerHTML 时,它都会覆盖整个内容。如果在第三个示例中您使用+= 如下所示,它应该添加两种样式:

var st=document.getElementsByTagName("style")[0];
st.innerHTML = ".red color:red;";
st.innerHTML += ".blue color:blue;";

【讨论】:

同意。但我在评论他的第三个例子。 style 标签中的内容最初似乎被保留了,但在第三个示例中,当您最初没有样式时,一次只添加一个样式,除非您使用 +=,否则它会覆盖它们。 jsfiddle.net/mtr4b/1 已经存在的样式已经被浏览器应用了。

以上是关于样式innerHTML的主要内容,如果未能解决你的问题,请参考以下文章

微信小程序10(wxss-样式导入内联样式选择器全局样式与局部样式)

CSSCSS 层叠样式表 ① ( 简介 | CSS 引入方式 - 内联样式 | 内联样式语法 | 内联样式缺点 )

JS修改CSS设置的样式

原生JS获取及设置CSS样式-1.行内样式

打破 Grommet 样式组件样式的全局样式

字体样式 文本样式