向当前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 相关文章推荐
IE 上下滚动展示模仿Marquee机制
Dec 20 Javascript
九种js弹出对话框的方法总结
Mar 12 Javascript
javascript 禁用IE工具栏,导航栏等等实现代码
Apr 01 Javascript
Javascript call和apply区别及使用方法
Nov 14 Javascript
JavaScript插件化开发教程 (二)
Jan 27 Javascript
JavaScript模拟重力状态下抛物运动的方法
Mar 03 Javascript
jQuery.Highcharts.js绘制柱状图饼状图曲线图
Mar 14 Javascript
JavaScript中的getMilliseconds()方法使用详解
Jun 10 Javascript
JavaScrpt的面向对象全面解析
May 09 Javascript
详细分析jsonp的原理和实现方式
Nov 20 Javascript
Vue编写可显示周和月模式的日历 Vue自定义日历内容的显示
Jun 26 Javascript
js实现简单掷骰子小游戏
Oct 24 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项目打包方法
2008/02/18 PHP
利用PHP实现短域名互转
2013/07/05 PHP
div li的多行多列 无刷新分页示例代码
2013/10/16 PHP
PHP中魔术变量__METHOD__与__FUNCTION__的区别
2014/09/29 PHP
PHP中Session ID的实现原理实例分析
2019/08/17 PHP
疯掉了,尽然有js写的操作系统
2007/04/23 Javascript
jquery.Ajax()方法调用Asp.Net后台的方法解析
2014/02/13 Javascript
jQuery使用slideUp方法实现控制元素缓慢收起
2015/03/27 Javascript
AngularJS操作键值对象类似java的hashmap(填坑小结)
2016/11/12 Javascript
Angular使用 ng-img-max 调整浏览器中的图片的示例代码
2017/08/17 Javascript
JavaScript实现修改伪类样式
2017/11/27 Javascript
重学 JS:为啥 await 不能用在 forEach 中详解
2019/04/15 Javascript
mock.js模拟数据实现前后端分离
2019/07/24 Javascript
详解vue-template-admin三级路由无法缓存的解决方案
2020/03/10 Javascript
[03:42]2014DOTA2西雅图国际邀请赛 Navi战队巡礼
2014/07/07 DOTA
python中的lambda表达式用法详解
2016/06/22 Python
python用pickle模块实现“增删改查”的简易功能
2017/06/07 Python
Python实现基于二叉树存储结构的堆排序算法示例
2017/12/08 Python
python递归函数绘制分形树的方法
2018/06/22 Python
Python中调用其他程序的方式详解
2019/08/06 Python
python中的函数递归和迭代原理解析
2019/11/14 Python
Python表达式的优先级详解
2020/02/18 Python
Python操作dict时避免出现KeyError的几种解决方法
2020/09/20 Python
Python实现EM算法实例代码
2020/10/04 Python
应届专科生个人的自我评价
2014/01/05 职场文书
自荐信的基本格式
2014/02/22 职场文书
求职个人评价范文
2014/04/09 职场文书
机械加工与数控专业自荐书
2014/06/04 职场文书
竞选学委演讲稿
2014/09/13 职场文书
放假通知
2015/04/14 职场文书
会议通知
2015/04/15 职场文书
机关单位保密工作责任书
2015/05/11 职场文书
离婚律师函范本
2015/05/27 职场文书
Python Parser的用法
2021/05/12 Python
html5 录制mp3音频支持采样率和比特率设置
2021/07/15 Javascript
python机器学习Github已达8.9Kstars模型解释器LIME
2021/11/23 Python