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


Posted in Javascript onApril 01, 2013

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

先看代码:

/** 
* Add a stylesheet rule to the document (may be better practice, however, 
* to dynamically change classes, so style information can be kept in 
* genuine styesheets (and avoid adding extra elements to the DOM)) 
* Note that an array is needed for declarations and rules since ECMAScript does 
* not afford a predictable object iteration order and since CSS is 
* order-dependent (i.e., it is cascading); those without need of 
* cascading rules could build a more accessor-friendly object-based API. 
* @param {Array} decls Accepts an array of JSON-encoded declarations 
* @example 
addStylesheetRules([ 
['h2', // Also accepts a second argument as an array of arrays instead 
['color', 'red'], 
['background-color', 'green', true] // 'true' for !important rules 
], 
['.myClass', 
['background-color', 'yellow'] 
] 
]); 
*/ 
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> 
div.content{color:#000;border:1px solid} 
</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支持这个方法
Javascript 相关文章推荐
利用JavaScript实现新闻滚动效果(实例代码)
Nov 27 Javascript
Javascript基础教程之定义和调用函数
Jan 18 Javascript
js与jquery实时监听输入框值的oninput与onpropertychange方法
Feb 05 Javascript
JQuery的ON()方法支持的所有事件罗列
Feb 28 Javascript
Vue.js每天必学之构造器与生命周期
Sep 05 Javascript
bootstrap3-dialog-master模态框使用详解
Aug 22 Javascript
详解jquery插件jquery.viewport.js学习使用方法
Sep 08 jQuery
Vue组件库发布到npm详解
Feb 17 Javascript
vue translate peoject实现在线翻译功能【新手必看】
Jun 07 Javascript
浅析Vue.js中v-bind v-model的使用和区别
Dec 04 Javascript
jsonp格式前端发送和后台接受写法的代码详解
Nov 07 Javascript
Vue使用v-viewer实现图片预览
Oct 21 Javascript
select标签模拟/美化方法采用JS外挂式插件
Apr 01 #Javascript
html组件不可输入(只读)同时任何组件都有效
Apr 01 #Javascript
jQuery 网易相册鼠标移动显示隐藏效果实现代码
Mar 31 #Javascript
jQuery实现页面滚动时层智能浮动定位实例探讨
Mar 29 #Javascript
表单验证的完整应用案例探讨
Mar 29 #Javascript
JavaScript 处理Iframe自适应高度(同或不同域名下)
Mar 29 #Javascript
图片img的src不变让浏览器重新加载实现方法
Mar 29 #Javascript
You might like
php 友好URL的实现(吐血推荐)
2008/10/04 PHP
关于php开启错误提示的总结
2019/09/24 PHP
TNC vs BOOM BO3 第二场2.13
2021/03/10 DOTA
数理公式,也可以这么唯美
2021/03/10 无线电
jQuery 注意事项 与原因分析
2009/04/24 Javascript
MooTools 1.2介绍
2009/09/14 Javascript
js获取元素到文档区域document的(横向、纵向)坐标的两种方法
2013/05/17 Javascript
让javascript加载速度倍增的方法(解决JS加载速度慢的问题)
2014/12/12 Javascript
JS折半插入排序算法实例
2015/12/02 Javascript
快速掌握Node.js之Window下配置NodeJs环境
2016/03/21 NodeJs
vue动态组件实现选项卡切换效果
2017/03/08 Javascript
zTree实现节点修改的实时刷新功能
2017/03/20 Javascript
Vuex简单入门
2017/04/19 Javascript
微信小程序实现倒计时60s获取验证码
2020/04/17 Javascript
Angular4开发解决跨域问题详解
2017/08/28 Javascript
从vue基础开始创建一个简单的增删改查的实例代码(推荐)
2018/02/11 Javascript
基于Vue实现微信小程序的图文编辑器
2018/07/25 Javascript
jquery无缝图片轮播组件封装
2020/11/25 jQuery
详解Django中间件的5种自定义方法
2018/07/26 Python
Python3的介绍、安装和命令行的认识(推荐)
2018/10/20 Python
在Python中COM口的调用方法
2019/07/03 Python
python使用tomorrow实现多线程的例子
2019/07/20 Python
python实现socket+threading处理多连接的方法
2019/07/23 Python
关于Numpy中的行向量和列向量详解
2019/11/30 Python
Python如何解除一个装饰器
2020/08/07 Python
python中remove函数的踩坑记录
2021/01/04 Python
Etam俄罗斯:法国女士内衣和家居服网上商店
2019/10/30 全球购物
Tomcat中怎么使用log4j输出所有的log
2016/07/07 面试题
大学生军训广播稿
2014/01/24 职场文书
大学毕业自我评价
2014/02/02 职场文书
大学生社会实践方案
2014/05/11 职场文书
公司活动总结范文
2014/07/01 职场文书
2014班子“三严三实”对照检查材料思想汇报
2014/09/18 职场文书
小学工作总结2015
2015/05/04 职场文书
MySQL时区造成时差问题
2022/04/13 MySQL
详解Go语言中Get/Post请求测试
2022/06/01 Golang