向当前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 相关文章推荐
某页码显示的helper 少量调整,另附js版
Sep 12 Javascript
Jquery和JS用外部变量获取Ajax返回的参数值的方法实例(超简单)
Jun 17 Javascript
js的Boolean对象初始值示例
Mar 04 Javascript
JS显示下拉列表框内全部元素的方法
Mar 31 Javascript
JavaScript控制网页平滑滚动到指定元素位置的方法
Apr 17 Javascript
分享经典的JavaScript开发技巧
Nov 21 Javascript
浅谈js中的in-for循环
Jun 28 Javascript
让浏览器崩溃的12行JS代码(DoS攻击分析及防御)
Oct 10 Javascript
RequireJS 依赖关系的实例(推荐)
Jan 21 Javascript
angularjs中使用ng-bind-html和ng-include的实例
Apr 28 Javascript
JS交互点击WKWebView中的图片实现预览效果
Jan 05 Javascript
原生Vue 实现右键菜单组件功能
Dec 16 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
生成ubuntu自动切换壁纸xml文件的php代码
2010/07/17 PHP
php文本转图片自动换行的方法
2013/03/13 PHP
完美的2个php检测字符串是否是utf-8编码函数分享
2014/07/28 PHP
thinkphp框架实现数据添加和显示功能
2016/06/29 PHP
javascript TextArea动态显示剩余字符
2008/10/22 Javascript
JavaScript Event学习补遗 addEventSimple
2010/02/11 Javascript
js实现的日期操作类DateTime函数代码
2010/03/16 Javascript
属于你的jQuery提示框(Tip)插件
2016/01/20 Javascript
jqGrid用法汇总(全经典)
2016/06/28 Javascript
jQuery内容过滤选择器用法示例
2016/09/09 Javascript
详解NodeJs支付宝移动支付签名及验签
2017/01/06 NodeJs
ExtJs的Ext.Ajax.request实现waitMsg等待提示效果
2017/06/14 Javascript
node.js支持多用户web终端实现及安全方案
2017/11/29 Javascript
基于Vue实现的多条件筛选功能的详解(类似京东和淘宝功能)
2019/05/07 Javascript
js实现随机抽奖
2020/03/19 Javascript
在vue中封装的弹窗组件使用队列模式实现方法
2020/07/23 Javascript
Postman参数化实现过程及原理解析
2020/08/13 Javascript
[02:43]2018DOTA2亚洲邀请赛主赛事首日TOP5
2018/04/04 DOTA
python中xrange和range的区别
2014/05/13 Python
利用Python和OpenCV库将URL转换为OpenCV格式的方法
2015/03/27 Python
以一段代码为实例快速入门Python2.7
2015/03/31 Python
在python3环境下的Django中使用MySQL数据库的实例
2017/08/29 Python
pycharm远程调试openstack代码
2017/11/21 Python
python使用ddt过程中遇到的问题及解决方案【推荐】
2018/10/29 Python
使用Python实现Wake On Lan远程开机功能
2020/01/22 Python
css 如何让背景图片拉伸填充避免重复显示
2013/07/11 HTML / CSS
Linux管理员面试题 Linux admin interview questions
2016/07/08 面试题
餐厅筹备计划书
2014/04/25 职场文书
业务内勤岗位职责
2014/04/30 职场文书
2014国庆节幼儿园亲子活动方案
2014/09/16 职场文书
2015年小学开学寄语
2015/02/27 职场文书
奖金申请报告模板
2015/05/15 职场文书
爱的教育读书笔记
2015/06/26 职场文书
PHP 技巧 * SVG 保存为图片(分享图生成)
2021/04/02 PHP
Mysql案例刨析事务隔离级别
2021/09/25 MySQL
windows server 2012安装FTP并配置被动模式指定开放端口
2022/06/10 Servers