【问题标题】:Change a CSS stylesheet's selectors' properties更改 CSS 样式表的选择器属性
【发布时间】:2018-10-06 19:05:10
【问题描述】:

这是我们传统上更改重复元素样式的方式。

将样式应用于每个元素

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');

使用类取代现有样式

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');

相反,我想更改实际样式表的选择器的属性(例如直接修改一个类)。我不想遍历与我的选择器匹配的元素并直接应用 CSS,也不想向元素添加修饰符类。

【问题讨论】:

    标签: javascript css class


    【解决方案1】:
    1. 使用外部样式表
    2. 在页面上确定其顺序
    3. 修改规则的属性

    这是如何做到这一点的:

    // 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;
        }
      }
    }
    

    确保您要修改的规则已存在于 CSS 文件中,并且级联顺序正确,即使它们为空。否则,如果选择器没有规则,则必须使用document.styleSheets[index].insertRule(),您必须指定规则列表中应插入规则的位置。

    changeCSSStyle('.warning', 'color', 'red');
    changeCSSStyle('td.special', 'fontSize', '14px');
    

    【讨论】:

      猜你喜欢
      • 2012-01-15
      • 1970-01-01
      • 2014-10-12
      • 2012-03-14
      • 2015-02-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-21
      相关资源
      最近更新 更多