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私の最初の質問は、 が存在するということはスタイルシートがrulesプロパティを持つことを意味し、存在しないということはそれがプロパティを持つことを意味するという推論についてどの程度確信があるかということcssRulesです。それは私にはかなり大ざっぱに見えるからですか?それは何に基づいていますか?

しかし、それが合理的な推論であると仮定すると、なぜCSSRules関数を呼び出すたびにその計算を行うのでしょうか? 起動時に一度計算して保存し、値を含むクロージャー内に関数を返します。

そうは言っても、あなたの主な問題に...

コードは、個々のセレクター (コンマで区切られたセレクターのグループ内) が.myClass. うまくいかないなど、少しでも複雑なdiv.myClassことはありますか?それがあなたがしようとしているすべての場合、私は(かなり不快ですが、実行可能な)解決策を持っていると思います:それらの1つが一致するコンマ区切りの解決策に遭遇したら、セレクターごとに新しいルールを記述し、既存のルール。次に、クラス名に一致するものについて、関連するプロパティを変更します。最後に、元のルールを削除します。

それは楽しいものではなく、一般的なケースでは明らかに保証されていないいくつかの仮定を行いますが、それらはコードで行おうとしていることと一致するように見えます.

ねえ、私はそれが不快だと言った !:-)

于 2012-07-08T03:29:11.950 に答える