向当前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 相关文章推荐
JQuery 学习笔记 选择器之六
Jul 23 Javascript
utf-8编码引起js输出中文乱码的解决办法
Jun 23 Javascript
jQuery+CSS 实现随滚动条增减的汽水瓶中的液体效果
Sep 26 Javascript
getAsDataURL在Firefox7.0下无法预览本地图片的解决方法
Nov 15 Javascript
js实现input框文字动态变换显示效果
Aug 19 Javascript
js实现按钮颜色渐变动画效果
Aug 20 Javascript
Bootstrap时间选择器datetimepicker和daterangepicker使用实例解析
Sep 17 Javascript
node.js中的事件处理机制详解
Nov 26 Javascript
jQuery 常见小例汇总
Dec 14 Javascript
原生JS下拉加载插件分享
Dec 26 Javascript
js实现固定宽高滑动轮播图效果
Jan 13 Javascript
js字符串与Unicode编码互相转换
May 17 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禁止页面缓存的代码
2011/10/23 PHP
114啦源码(114la)不能生成地方房产和地方报刊问题4级页面0字节的解决方法
2012/01/12 PHP
解析PHP SPL标准库的用法(遍历目录,查找固定条件的文件)
2013/06/18 PHP
CodeIgniter多语言实现方法详解
2016/01/20 PHP
Netbeans 8.2将支持PHP7 更精彩
2016/06/13 PHP
javascript匿名函数实例分析
2014/11/18 Javascript
JavaScript正则表达式中的ignoreCase属性使用详解
2015/06/16 Javascript
js实现鼠标点击文本框自动选中内容的方法
2015/08/20 Javascript
基于Jquery代码实现手风琴菜单
2015/11/19 Javascript
基于jquery实现表格内容筛选功能实例解析
2016/05/09 Javascript
Bootstrap源码解读导航条(7)
2016/12/23 Javascript
原生javascript上传图片带进度条【实例分享】
2017/04/06 Javascript
vue表单绑定实现多选框和下拉列表的实例
2017/08/12 Javascript
微信小程序媒体组件详解(视频,音乐,图片)
2017/09/19 Javascript
JavaScript框架Angular和React深度对比
2017/11/20 Javascript
vue cli使用绝对路径引用图片问题的解决
2017/12/06 Javascript
详解angular2如何手动点击特定元素上的点击事件
2018/10/16 Javascript
详解基于electron制作一个node压缩图片的桌面应用
2019/01/29 Javascript
javascript实现视频弹幕效果(两个版本)
2019/11/28 Javascript
vuejs实现下拉框菜单选择
2020/10/23 Javascript
Python3通过Luhn算法快速验证信用卡卡号的方法
2015/05/14 Python
教你学会使用Python正则表达式
2017/09/07 Python
python 使用正则表达式按照多个空格分割字符的实例
2018/12/20 Python
Python可变和不可变、类的私有属性实例分析
2019/05/31 Python
Python发起请求提示UnicodeEncodeError错误代码解决方法
2020/04/21 Python
解决pycharm编辑区显示yaml文件层级结构遇中文乱码问题
2020/04/27 Python
CSS3的颜色渐变效果的示例代码
2017/09/29 HTML / CSS
台湾深度自由行旅游平台:Tripbaa趣吧
2017/10/10 全球购物
日语专业推荐信
2013/11/12 职场文书
上课看小说检讨书
2014/02/22 职场文书
安全生产专项整治方案
2014/05/06 职场文书
大学生社会实践方案
2014/05/11 职场文书
付款委托书范本
2014/10/05 职场文书
2014年党建工作汇报材料
2014/10/27 职场文书
浅谈Web Storage API的使用
2021/06/23 Javascript
SQL语句中EXISTS的详细用法大全
2022/06/25 MySQL