【发布时间】:2019-07-14 00:14:47
【问题描述】:
借助这个答案 (get all css classes background & color properties values),我可以获得所有 CSS 类的背景和颜色属性值。当我使用内部 css 代码时它可以工作。
现在,我有超过 35 个外部 CSS 样式表。当我尝试下面的代码时,它只返回第一个外部 CSS 文件输出。无法获取剩余的样式表背景和颜色属性值。如何访问剩余的样式表?
$('#nightMode').on('click', function() {
// var color = $("body").css("background");
// var test = invertColor("#00a3fe");
// console.log(color);
let styles = document.styleSheets;
const rgbToHex = (rgbStr) => !rgbStr ? '':'#' + rgbStr
.slice(4,-1)
.split(', ')
.map(x => (+x).toString(16).padStart(2, '0'))
.join('');
let cssArr =[...styles[0].cssRules].map(x=> ({
class: x.selectorText,
background: rgbToHex(x.style.background),
color: rgbToHex(x.style.color)
} ));
let genCssStr='';
genCssStr+= '<style> \n\n';
cssArr.forEach(x=> genCssStr+=`${x.class}{\n` +
(x.background ? ` background:${invertColor(x.background)};\n` : '') +
(x.color ? ` color:${invertColor(x.color)};\n` : '') + `}\n\n`);
genCssStr+= '</style>';
console.log(styles);
console.log(genCssStr);
$(genCssStr).appendTo("body");
// console.log("array:", JSON.stringify(cssArr));
// console.log("text:\n\n", genCssStr);
});
【问题讨论】:
-
"...现在,我有超过 35 个外部 css 样式表。" 哎呀!我见过最多有 5 到 8 个样式表的臃肿的 CMS 和 WordPuke 网站。您无需为需要压缩和重构的 CSSRules 乱七八糟。
-
你看过
[...styles[0].cssRules]在控制台中的样子吗?看起来很可疑。试试这个:let cssBloatedArray = styles.cssRules然后[...cssBloatedArray] -
@zer00ne
[...styles[0].cssRules]它在控制台中返回这个Array(6) [ CSSFontFaceRule, CSSFontFaceRule, CSSFontFaceRule, CSSFontFaceRule, CSSFontFaceRule, CSSStyleRule ".massitems a" ] -
@zer00ne
let cssBloatedArray = styles.cssRules然后[...cssBloatedArray]这个返回TypeError: cssBloatedArray is undefined -
@zer00ne
let cssBloatedArray = styles[0].cssRules然后[...cssBloatedArray]这返回Array(6) [ CSSFontFaceRule, CSSFontFaceRule, CSSFontFaceRule, CSSFontFaceRule, CSSFontFaceRule, CSSStyleRule ".massitems a" ]
标签: javascript jquery css arrays stylesheet