4

要素のスタイルを取得するために、Pro JavaScript Techniquesの John Resig のgetStyle関数を使用しています。

function getStyle(elem, name) {
    // J/S Pro Techniques p136
    if (elem.style[name]) {
        return elem.style[name];
    } else if (elem.currentStyle) {
        return elem.currentStyle[name];
    }
    else if (document.defaultView && document.defaultView.getComputedStyle) {
        name = name.replace(/([A-Z])/g, "-$1");
        name = name.toLowerCase();
        s = document.defaultView.getComputedStyle(elem, "");
        return s && s.getPropertyValue(name);
    } else {
        return null;
    }
}

ただし、スタイルが指定されていない場合、このメソッドは要素のデフォルト スタイルを返します。

http://johnboxall.github.com/test/getStyle.html

代替テキスト http://img.skitch.com/20081227-8qhxie51py21yxuq7scy32635a.png

要素のスタイルシートで指定されたスタイルのみを取得することは可能ですか (スタイルが定義されていない場合は null を返します)?

アップデート:

なぜ私はそのような獣が必要なのですか?ユーザーが要素のスタイルを設定できる小さなコンポーネントを作成しています。適用できるスタイルの1つはtext-align-leftです。これにより、ユーザーが要素を中央に配置したかったために中央に配置されているのか、それがデフォルトのスタイルであるために中央に配置されているのかを判断できなくなります。centerrightgetStylecenter

4

2 に答える 2

5

要素のスタイルシートで指定されたスタイルのみを取得することは可能ですか (スタイルが定義されていない場合は null を返します)?

それは、あなたが提示したルーチンによって効果的に行われることです。問題は、ほとんどのシナリオで、ほとんどのスタイルが未定義ではなく、個々のブラウザーの内部スタイルシートによって継承および/または定義されていることです。

ドキュメントの現在のビューにあるすべてのスタイルシートで、問題のスタイルを定義するすべてのルールを繰り返し処理し、問題の要素についてそれらを評価し、何も適用されない場合は...親に何も適用されていない場合(またはこの特定のスタイルが継承されていない場合)...未定義と見なします。これは遅く、信じられないほどエラーが発生しやすくなります。試してみることはお勧めしません。

おそらく、一歩下がって、なぜそのようなものが必要なのかを尋ねた方がよいでしょうか?

于 2008-12-27T20:17:52.540 に答える
2

あなたのコンポーネントは、それが制御するスタイルをラップできますか? 次に、コンポーネントを介してスタイルが設定されると、コンポーネントはユーザーが何を望んでいるかを認識します。

于 2008-12-27T20:31:20.597 に答える