javascript - cssRules 无法读取多个样式表类属性值

标签 javascript jquery css arrays stylesheet

借助此答案 (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);
});

最佳答案

主要问题是您只迭代了第一个样式表。您需要迭代所有样式表。 另请注意,您不能枚举 cssRules跨域样式表的属性

以下代码处理所有样式表(<link rel><style>)内的所有 css 规则。 try...catch添加 block 以在无法访问外部样式表时忽略 DOMExceptions:

var cssArr = [];
[...document.styleSheets].forEach(function(styleSheet) {
  var cssRules;
  try {
    cssRules = styleSheet.cssRules;
  } catch (e) {
    console.log("Cannot process " + styleSheet.href);
    return;
  }
  [...cssRules].forEach(function(cssRule) {
    cssArr.push({
      class: cssRule.selectorText,
      background: cssRule.style.background,
      color: cssRule.style.color
    });
  });
});
console.log(cssArr);

关于javascript - cssRules 无法读取多个样式表类属性值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54784094/

相关文章:

jquery - 在 jQuery 中执行动画时如何使用元素的属性?

php - Wordpress REST API 自定义帖子类型 禁止删除访问

html - 如何在 bootstrap 固定导航栏中移动元素

javascript - 格式化为 1000 分隔符后如何添加小数位

css - 使 DIV 重叠其下方的元素

javascript - 第三方 JS 文件弄乱了我的 CSS

javascript - 在 Wordpress 主题中使用 AJAX 的 SQL 查询

javascript - 上下文映射函数中的 jsx-no-bind

javascript - jQuery - 如何使用智能方式在滚动顶部加载内容

javascript - openlayers3移动功能,3.14以上版本不起作用