javascript - 如何使用其 cssRules 克隆 Style 元素?
问题描述
我有一个带有 CSS 属性的样式标签,其中添加了insertRule函数。
我试过Element.cloneNode(tree)
了,但它不包含 cssRules
// Add a style tag to head
var style = document.createElement("style");
style.id = "style",
style.type = "text/css",
document.head.appendChild(style);
// Insert some stylesheet rules
var sheet = style.sheet;
sheet.insertRule("p {background-color: red}", sheet.cssRules.length);
sheet.insertRule("p {color: white}", sheet.cssRules.length);
console.log(style.sheet); //Display an object with Css rules
// Try to clone
var styleClone = style.cloneNode(true);
console.log(styleClone.sheet); //Display null !
我希望styleClone.sheet
等于style.sheet
解决方案
克隆节点在添加到文档的一部分之前不会获得自己的sheet
属性(或对象)或CSSStyleSheet
<head>
<body>
我们可以通过将变量插入头部来赋予styleClone
它自己的变量,就像代码对变量所做的那样!sheet
style
这是我得到的
// Add style a tag to head
var style = document.createElement("style");
style.id = "style",
style.type = "text/css",
document.head.appendChild(style);
// Insert some stylesheet rules
var sheet = style.sheet;
sheet.insertRule("p {background-color: red}", sheet.cssRules.length);
sheet.insertRule("p {color: white}", sheet.cssRules.length);
console.log(style.sheet); //Display an object with Css rules
// Try to clone
var styleClone = style.cloneNode(true);
console.log(styleClone.sheet); //Display null !
// Added
document.head.appendChild(styleClone);
// Copy all rules from style variable
for (var i = 0; i < style.sheet.rules.length; i++) {
styleClone.sheet.insertRule(style.sheet.rules[i].cssText)
}
推荐阅读
- c# - 将值设置为在另一个列表中列出
- ios - 渲染 MTIImage
- php - exec rm -rf 无法删除 php 中的 .sql 文件
- javascript - 使用 javascript 中的关键字过滤表
- c# - Log4Net FileAppender 不工作
- python - 训练文本语料库太大而无法加载到内存中
- c - 使用 realloc 动态增长结构数组会导致堆损坏
- php - Zend db - 更新不起作用
- openlayers - openlayers 4中map.beforeRender的等价物是什么?
- laravel - Laravel 查询生成器 - 如何按关系字段过滤