2012-03-13 10 views
0

私はJavaScriptスタイルシートを作成し、ルールを挿入する "Javascript:The Definitive Guide"(442-444ページまたはkindleロケーション14998)から変更されたJavascriptコードを持っています。しかし、私はそれを促進標準的手法を使用すると、Chromeで動作していないことが判明:「!あなた」"insertRule"のバグ?

JSFiddle #1

上記のコードは、単語のみクロム、で実行された場合オレンジ色に変わります。私は醜いハックを導入した場合、それはChromeで[OK]を動作します:

JSFiddle #2

が、これは本の中で、エラー、Chromeのバグで、または私が台無しに?

私は、この演習では意図的にライブラリ(例:jqueryなど)を使用していません。

if (typeof styles === "string") { 
// The argument is stylesheet text 
if (styleElt) { 
    styleElt.innerHTML = styles; 
} else { 

+1

なぜjqueryはあなたにこれをさせませんか? – Paul

+1

明確にするために、質問に「ライブラリなし」メモを追加しました。 :) –

+0

Flanaganの本(第6版)で提供されているコードは、*新しいスタイルシートの* .innerHTML *を変更するか、* .insertRule() '/'.addRule()'を使用するため動作します。それは両方を使用しません。 *すべての 'addCSSRule'呼び出しに対して* new *スタイルシートを作成します。私は '.innerHTML'が[DOM CSS](http://www.w3.org/TR/DOM-Level-2-Style/css.html)とうまく動作しないと思います。 (ところで、あなたのコードはFirefox 10とIE7-9では動作しません)。 – Zeta

答えて

0

ラインstyleElt.innerHTML = styles;styleSheetオブジェクトを再作成します。 styleSheet.styleSheetの値が文書から切り離され、以前に宣言されたすべてのスタイルルールが失われます。

FirefoxはChromeと同じように動作するため、これはバグではないようです。