1

我知道这不是修改 CSS 类的常用方法......但无论如何>>我有以下函数可以用 JavaScript 更改 CSS 参数:

function changeCSSParameter(classId, param, value)
{
  var CSSRules;
  if (document.all)
  {
    CSSRules = 'rules';
  }
  else if (document.getElementById)
  {
    CSSRules = 'cssRules';
  }
  for (var i = 0; i < document.styleSheets[0][CSSRules].length; i++)
  {
    var classes = document.styleSheets[0][CSSRules][i].selectorText.split(/\s*,\s*/);
    for (var j = 0; j < classes.length; j++)
    {
      if (classes[j] == classId)
      {
        document.styleSheets[0][CSSRules][i].style.setProperty(param, value, '');
      }
    }
  } 
}

但是,如果样式类是按组定义的,则此功能将无法正常工作,例如

.first, .second
{
  color: red;
}

...因为任何更改都将适用于这两个类。我该如何解决这个问题?请指教。

请不要使用 jQuery,只需使用老式的 JavaScript。

4

1 回答 1

1

我的第一个问题是你对这样的推断有多大document.all把握?因为这对我来说似乎很粗略?它的依据是什么?rulescssRules

但是假设这是一个合理的推论,为什么你要CSSRules在每次调用你的函数时进行计算呢?在启动时计算一次并存储它,在包含该值的闭包中返回您的函数。

也就是说,关于你的主要问题......

只有当单个选择器(在逗号分隔的选择器组内)是单个类选择器(例如.myClass. 任何更复杂的东西,比如div.myClass不起作用,对吗?如果这就是你想要做的所有事情,我想我有一个(相当讨厌,但可行的)解决方案:遇到一个以逗号分隔的解决方案,其中一个是匹配的,为每个选择器编写新规则,克隆现有规则。然后对于与您的班级名称匹配的那个,更改相关属性。最后,删除原来的规则。

这不好玩,而且它做了几个假设,在一般情况下显然没有保证,但看起来它们可能与您在代码中尝试执行的操作相匹配。

嘿,我确实说过这很讨厌!:-)

于 2012-07-08T03:29:11.950 回答