向当前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 相关文章推荐
用jscript实现列出安装的软件列表
Jun 18 Javascript
javascript 处理事件绑定的一些兼容写法
Dec 24 Javascript
JS Map 和 List 的简单实现代码
Jul 08 Javascript
javascript作用域链(Scope Chain)用法实例解析
Nov 30 Javascript
JQUERY的AJAX请求缓存里的数据问题处理
Feb 23 Javascript
js实现鼠标左右移动,图片也跟着移动效果
Jan 25 Javascript
浅析Javascript中双等号(==)隐性转换机制
Oct 27 Javascript
JS实现验证码倒计时的注册页面
Jan 02 Javascript
JS实现不用中间变量temp 实现两个变量值得交换方法
Feb 04 Javascript
实战node静态文件服务器的示例代码
Mar 08 Javascript
微信JS-SDK实现微信会员卡功能(给用户微信卡包里发送会员卡)
Jul 25 Javascript
js正则表达式简单校验方法
Jan 03 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版
2012/04/20 PHP
PHP缓冲区用法总结
2016/02/14 PHP
baidu博客的编辑友情链接的新的层窗口!经典~支持【FF】
2007/02/09 Javascript
JavaScript中exec函数用法实例分析
2015/06/08 Javascript
XML文件转化成NSData对象的方法
2015/08/12 Javascript
jquery插件格式实例分析
2016/06/16 Javascript
纯JS实现轮播图
2017/02/22 Javascript
JavaScript实现修改伪类样式
2017/11/27 Javascript
Vue项目使用CDN优化首屏加载问题
2018/04/01 Javascript
vue.js与element-ui实现菜单树形结构的解决方法
2018/04/21 Javascript
elementUI多选框反选的实现代码
2019/04/03 Javascript
Node.JS发送http请求批量检查文件中的网页地址、服务是否有效可用
2019/11/20 Javascript
vue中组件通信详解(父子组件, 爷孙组件, 兄弟组件)
2020/07/27 Javascript
vue组件开发之slider组件使用详解
2020/08/21 Javascript
[46:28]EG vs Liquid 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.23
2019/09/05 DOTA
对python3中, print横向输出的方法详解
2019/01/28 Python
python3.6实现学生信息管理系统
2019/02/21 Python
使用Flask-Cache缓存实现给Flask提速的方法详解
2019/06/11 Python
Django中使用session保持用户登陆连接的例子
2019/08/06 Python
程序员的七夕用30行代码让Python化身表白神器
2019/08/07 Python
python 变量初始化空列表的例子
2019/11/28 Python
Python单元测试及unittest框架用法实例解析
2020/07/09 Python
在vscode中启动conda虚拟环境的思路详解
2020/12/25 Python
webView加载html图片遇到的问题解决
2019/10/08 HTML / CSS
找到不普通的东西:Bonanza
2016/10/20 全球购物
Proenza Schouler官方网站:纽约女装和配饰品牌
2019/01/03 全球购物
照片礼物和装饰:MyPhoto
2019/11/02 全球购物
创意活动策划书
2014/01/15 职场文书
医院总经理岗位职责
2014/02/04 职场文书
房地产项目策划书
2014/02/05 职场文书
个人批评与自我批评总结
2014/10/17 职场文书
2015年母亲节活动总结
2015/02/10 职场文书
2015年医院工作总结范文
2015/04/09 职场文书
复兴之路观后感
2015/06/02 职场文书
团组织推荐意见
2015/06/05 职场文书
金砖之国观后感
2015/06/11 职场文书