向当前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 类与静态类的实现(续)
Apr 02 Javascript
过虑特殊字符输入的js代码
Aug 05 Javascript
初窥JQuery(二) 事件机制(1)
Nov 25 Javascript
Javascript中3种实现继承的方法和代码实例
Aug 12 Javascript
javascript模拟评分控件实现方法
May 13 Javascript
JS触摸屏网页版仿app弹窗型滚动列表选择器/日期选择器
Oct 30 Javascript
微信小程序开发之实现选项卡(窗口顶部TabBar)页面切换
Nov 25 Javascript
jQuery实现多张图片上传预览(不经过后端处理)
Apr 29 jQuery
js es6系列教程 - 基于new.target属性与es5改造es6的类语法
Sep 02 Javascript
JS中的多态实例详解
Oct 15 Javascript
MVVM 双向绑定的实现代码
Jun 21 Javascript
微信小程序module.exports模块化操作实例浅析
Dec 20 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 header 跳转
2013/06/17 PHP
php判断页面是否是微信打开的示例(微信打开网页)
2014/04/25 PHP
完美解决thinkphp验证码出错无法显示的方法
2014/12/09 PHP
PHP生成和获取XML格式数据的方法
2016/03/04 PHP
浅谈php(codeigniter)安全性注意事项
2017/04/06 PHP
浅谈PHP发送HTTP请求的几种方式
2017/07/25 PHP
php如何实现数据库的备份和恢复
2020/11/30 PHP
很多人都是用下面的js刷新站IP和PV
2008/09/05 Javascript
另一个javascript小测验(代码集合)
2011/07/27 Javascript
什么是DOM(Document Object Model)文档对象模型
2012/03/05 Javascript
Jquery为a标签的href赋值实现代码
2013/05/03 Javascript
JS验证控制输入中英文字节长度(input、textarea等)具体实例
2013/06/21 Javascript
JS比较2个日期间隔的示例代码
2014/04/15 Javascript
js获取当前页面的url网址信息
2014/06/12 Javascript
js实现a标签超链接提交form表单的方法
2015/06/24 Javascript
使用JavaScript判断手机浏览器是横屏还是竖屏问题
2016/08/02 Javascript
js实现带三角符的手风琴效果
2017/03/01 Javascript
Javascript之图片的延迟加载的实例详解
2017/07/24 Javascript
基于Vue实现后台系统权限控制的示例代码
2017/08/29 Javascript
关于JavaScript 数组你应该知道的事情(推荐)
2019/04/10 Javascript
详解vue.js移动端配置flexible.js及注意事项
2019/04/10 Javascript
express启用https使用小记
2019/05/21 Javascript
微信小程序实现上传多张图片、删除图片
2020/07/29 Javascript
[03:42]2018完美盛典-《加冕》
2018/12/16 DOTA
利用soaplib搭建webservice详细步骤和实例代码
2013/11/20 Python
python安装与使用redis的方法
2016/04/19 Python
Python基于回溯法子集树模板解决m着色问题示例
2017/09/07 Python
Python简单实现查找一个字符串中最长不重复子串的方法
2018/03/26 Python
Python将列表数据写入文件(txt, csv,excel)
2019/04/03 Python
numpy np.newaxis 的实用分享
2019/11/30 Python
python 获取域名到期时间的方法步骤
2021/02/10 Python
初中毕业典礼演讲稿
2014/09/09 职场文书
无犯罪记录证明样本
2015/06/16 职场文书
导游词之包公祠
2019/11/25 职场文书
php png失真的原因及解决办法
2021/11/17 PHP
docker compose 部署 golang 的 Athens 私有代理问题
2022/04/28 Servers