gmo*_*z22 8 javascript css class
以下是我们传统上如何更改重复元素的样式。
将样式应用到每个元素
function changeStyle(selector, prop, val) {
var elems = document.querySelectorAll(selector);
Array.prototype.forEach.call( elems, function(ele) {
ele.style[prop] = val;
});
}
changeStyle('.myData', 'color', 'red');
Run Code Online (Sandbox Code Playgroud)
使用类来取代现有的样式
function addClass(selector, newClass) {
var elems = document.querySelectorAll(selector);
for (let i=0; i<elems.length; i++) {
elems[i].classList.add(newClass);
};
}
addClass('.myData', 'redText');
Run Code Online (Sandbox Code Playgroud)
相反,我想更改实际样式表的选择器属性(例如直接修改类)。我不想循环遍历与我的选择器匹配的元素并直接应用 CSS,也不想向元素添加修饰符类。
gmo*_*z22 10
具体做法如下:
// ssMain is the stylesheet's index based on load order. See document.styleSheets. E.g. 0=reset.css, 1=main.css.
var ssMain = 1;
var cssRules = (document.all) ? 'rules': 'cssRules';
function changeCSSStyle(selector, cssProp, cssVal) {
for (i=0, len=document.styleSheets[ssMain][cssRules].length; i<len; i++) {
if (document.styleSheets[ssMain][cssRules][i].selectorText === selector) {
document.styleSheets[ssMain][cssRules][i].style[cssProp] = cssVal;
return;
}
}
}
Run Code Online (Sandbox Code Playgroud)
确保要修改的规则已存在于 CSS 文件中,并且级联顺序正确,即使它们为空。否则,如果选择器没有规则,则必须使用该选择器,并且document.styleSheets[index].insertRule()必须指定规则应插入到规则列表中的位置。
changeCSSStyle('.warning', 'color', 'red');
changeCSSStyle('td.special', 'fontSize', '14px');
Run Code Online (Sandbox Code Playgroud)