手机
当前位置:查字典教程网 >编程开发 >Javascript教程 >向当前style sheet中插入一个新的style实现方法
向当前style sheet中插入一个新的style实现方法
摘要:很少会插入一个新的stylerule,今天为了临时解决页面样式问题,需要更新很多页面的一些样式,这些页面都引用了一个公共的js,为了方便,直...

很少会插入一个新的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支持这个方法

【向当前style sheet中插入一个新的style实现方法】相关文章:

js去字符串前后空格的实现方法

Nodejs中session的简单使用及通过session实现身份验证的方法

JavaScript中的substr()方法使用详解

jQuery子窗体取得父窗体元素的方法

javascript实时显示当天日期的方法

JavaScript检测字符串中是否含有html标签实现方法

详解AngularJS中$http缓存以及处理多个$http请求的方法

JS实现带缓冲效果打开、关闭、移动一个层的方法

javascript获取select值的方法分析

Jquery动态添加输入框的方法

精品推荐
分类导航