1

edit は、techfoobarが指摘した問題を解決するためにregexprを使用したテストを追加しました

他の人のために2つの修正されたコードを編集 しますhf :)

指定されたクラスからすべての静的スタイルを取得する方法を探しています。値はしばしば計算されるだけなので、新しい div を追加してそこからすべての可能な値を抽出したくありません...

関連する投稿は次のとおりです。

要素の計算されたスタイルを返し、その要素を疑似クローンするjQuery CSSプラグイン?

jQueryは要素に関連付けられたすべてのCSSスタイルを取得できますか?

http://quirksmode.org/dom/w3c_css.html

これは私がこれまでに思いついたものです:

function getExternalCSS(className) {
    var cssText = false;
    $.each(document.styleSheets, function(key, value) {
        $.each(value.cssRules, function(k, v) {
            if(new RegExp(className, "i").test(v.selectorText)) {
                cssText = v.cssText;
                return false;
            }
        });
        if(cssText !== false) {
            return false;
        }
    });
    return cssText;
}

参照するcss:

.someClass {
    style1...
}
.someOtherClass {
    style2...
}
.myClassToFind {
    style3...
}

利用方法:

    getExternalCSS(".myClassToFind");  //note the . for class

selectorText は正しく返されますが、ifトリガーされることはありません。私はすでに文字列などに解析しようとしました。何かアイデアはありますか?

4

1 に答える 1

1

アップデート

このデモを確認してください: http://jsfiddle.net/XaB3T/1/

いくつかの問題がありました:

a)ループを止めるにはreturn falseaからする必要があります。これは行われていませんでした。b) あなたが確認していたのは、すべてが小さなケースではないため、確実に一致しないものです。$.eachbreakv.selectorText.toLowerCase()'.myClass''.myClass'


説明For counting in only those styles that will be applied at the end, you might need to do a lot more!

CSS 固有性規則については、以下を参照してください。


次のif理由により、 は決して true を返しません。

a) セレクターのテキストは正確である必要はありません.yourClass.a .yourClassdiv.yourClassまたはなどである可能性があり.anotherClass, .yourClassます..すべてがあなたの要素を指しています

b) チェックは次のようにする必要があります。

for each selectorText {
   strip off any { character
   split the selector text by ',' into an array called parts
   for each part {
      check if it ends with '.yourClass' // if it does, this class is match
   }
}

もう 1 つの問題は、CSS の特異性です。最後に適用されるスタイルのみをカウントするには、さらに多くの作業が必要になる場合があります。

于 2012-07-20T14:59:27.443 に答える