向当前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 Jquery 遍历Json的实现代码
Mar 31 Javascript
jquery getScript动态加载JS方法改进详解
Nov 15 Javascript
jquery中prop()方法和attr()方法的区别浅析
Sep 06 Javascript
Angularjs实现多个页面共享数据的方式
Mar 29 Javascript
JS简单编号生成器实现方法(附demo源码下载)
Apr 05 Javascript
原生javascript实现图片放大镜效果
Jan 18 Javascript
JavaScript使用atan2来绘制箭头和曲线的实例
Sep 14 Javascript
完美解决手机浏览器顶部下拉出现网页源或刷新的问题
Nov 30 Javascript
vue 将页面公用的头部组件化的方法
Dec 18 Javascript
微信小程序中实现手指缩放图片的示例代码
Mar 13 Javascript
JavaScript中关于base64的一些事
May 06 Javascript
es6函数中的作用域实例分析
Apr 18 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预定义常量
2006/12/25 PHP
mysql 的 like 问题,超强毕杀记!!!
2007/01/18 PHP
js下函数般调用正则的方法附代码
2008/06/22 PHP
php实现批量压缩图片文件大小的脚本
2014/07/04 PHP
thinkPHP5实现的查询数据库并返回json数据实例
2017/10/23 PHP
php集成开发环境详解
2019/09/24 PHP
PHP网站常见安全漏洞,及相应防范措施总结
2021/03/01 PHP
javascript 单例/单体模式(Singleton)
2011/04/07 Javascript
jQuery EasyUI API 中文文档 - Menu菜单
2011/10/03 Javascript
jQuery简单自定义图片轮播插件及用法示例
2016/11/21 Javascript
基于Node.js + WebSocket打造即时聊天程序嗨聊
2016/11/29 Javascript
微信小程序 flex实现导航实例详解
2017/04/26 Javascript
echarts学习笔记之箱线图的分析与绘制详解
2017/11/22 Javascript
react实现菜单权限控制的方法
2017/12/11 Javascript
微信小程序slider组件使用详解
2018/01/31 Javascript
JavaScript设计模式之代理模式简单实例教程
2018/07/03 Javascript
浅谈React之状态(State)
2018/09/19 Javascript
微信小程序如何调用json数据接口并解析
2019/06/29 Javascript
JavaScript this在函数中的指向及实例详解
2019/10/14 Javascript
three.js利用卷积法如何实现物体描边效果
2019/11/27 Javascript
原生js实现密码强度验证功能
2020/03/18 Javascript
[01:15:12]DOTA2上海特级锦标赛主赛事日 - 1 败者组第一轮#4Newbee VS CDEC
2016/03/03 DOTA
Python matplotlib画图实例之绘制拥有彩条的图表
2017/12/28 Python
Python面向对象基础入门之设置对象属性
2018/12/11 Python
python3+PyQt5 数据库编程--增删改实例
2019/06/17 Python
解决tensorflow 释放图,删除变量问题
2020/06/23 Python
python爬虫要用到的库总结
2020/07/28 Python
如何使用Python进行PDF图片识别OCR
2021/01/22 Python
CSS3 完美实现圆角效果
2009/07/13 HTML / CSS
荷兰天然和有机产品网上商城:BigGreenSmile.nl
2020/07/26 全球购物
厂长岗位职责
2014/02/19 职场文书
退休教师欢送会主持词
2014/03/31 职场文书
财务会计大学生自我评价
2014/04/09 职场文书
2015年社区服务活动总结
2015/03/25 职场文书
花田少年史观后感
2015/06/16 职场文书
CSS font-variation 可变字体的魅力(实例详解)
2022/03/03 HTML / CSS