首页 > web前端 > js教程 > 正文

向当前style sheet中插入一个新的style实现方法_javascript技巧

WBOY
发布: 2016-05-16 17:38:47
原创
1471 人浏览过

很少会插入一个新的style rule,今天为了临时解决页面样式问题,需要更新很多页面的一些样式,这些页面都引用了一个公共的js,为了方便,直接在这个公共的js里面向style sheet插入新的style rule。

先看代码:

复制代码 代码如下:

/**
* 在文档中添加样式表规则(可能是更好的做法,
* 动态更改类,因此样式信息可以保留在
* 真正的样式表中(并避免向 DOM 添加额外的元素) ))
* 请注意,声明和规则需要一个数组,因为 ECMAScript
* 无法提供可预测的对象迭代顺序,并且 CSS 是
* 顺序相关的(即,它是级联的);那些不需要
* 级联规则的人可以构建一个更加访问者友好的基于对象的 API。
* @param {Array} decls 接受 JSON 编码声明的数组
* @example
addStylesheetRules([
['h2', // 还接受第二个参数作为数组的数组而是
['color', 'red'],
['background-color', 'green', true] // 'true' !重要规则
],
['. myClass',
['背景颜色', '黄色']
]
]);
*/
function addStylesheetRules (decls) {
var style = document.createElement('style');
document.getElementsByTagName('head')[0].appendChild(style);
if (!window.createPopup) { /* For Safari */
style.appendChild(document.createTextNode(''));
}
var s = document.styleSheets[document.styleSheets.length - 1];
for (var i=0, dl = decls.length; i < dl; i ) {
var j = 1, decl = decls[i], selector = decl[0], rulesStr = '';
if (Object.prototype.toString.call(decl[1][0]) === '[object Array]') {
decl = decl[1];
j = 0;
}
for (var rl=decl.length; j < rl; j ) {
var rule = decl[j];
rulesStr = rule[0] ':' rule[1] (rule[2] ? ' !important' : '') ';n';
}
if (s.insertRule) {
s.insertRule(selector '{' rulesStr '}', s.cssRules.length);
}
else { /* IE */
s.addRule(selector, rulesStr, -1);
}
}
}

复制代码 代码如下:

addStylesheetRules(["div.content", ["color": "#000"], ["border-width","1px"], ["border-style", "solid"]])

执行后当前document的head标签内,多了一个style
复制代码 代码如下:


知道怎么调用了吧,每次调用都会插入一个新的style,所以最好调用一次,插入多个rule
复制代码 代码如下:

addStylesheetRules(
[selector, [attr, value], …],
[selector, [attr, value], …]
);

主要用到两个方法
标准方法:stylesheet.insertRule(rule, index)
rule:被插入的rule,如 div.content{color:#000}
index: 插入顺序,先后顺序会影响样式的。从0开始
firefox、chrome、opera、safri、ie从ie9开始也支持这个方法
ie的stylesheet.addRule (selector, styleDef [, positionIndex]);
selector:如div.content
styleDef:如color:#000
positionIndex:默认-1,插入到末尾
ie、safari、chrome支持这个方法
相关标签:
来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板