2

<html> 要素でクラス .js および .no-js を使用して、Javascript を含むレイアウトとそうでないレイアウトを区別しています。

<html> 要素で、「no-js」のデフォルト クラスを追加しました。次に、ヘッダーに 1 行のスクリプトを含めてdocument.getElementsByTagName("html")[0].setAttribute("class","js");、html クラスを「js」に切り替えます。明らかに、このコード行は js が有効になっているブラウザーでのみ機能するため、<html> 要素は <html class="js"> になりますが、js が有効でないブラウザーは引き続き <html class="no-js" を読み取ります。 >。

そして、単純に.js someElement{ font-weight:bold;}vs.no-js someElement{ font-weight:normal;}を使用してページのスタイルを変えます。

ただし、このアプローチは IE7 では劇的に失敗することがわかりました。IE7 では、スクリプトは動作します。Developer Tools では、<html class="js"> と表示されます。ただし、.js で始まるすべての css スタイリングは IE7 によって無視され、IE7 は <html> 要素に .no-js のクラスがあるかのように動作します。(より明確な画像を取得するには、 http://bit.ly/LMre3Nをチェックしてください。)

ここで正確に何が間違っているのか想像できません。これは、CSS をレンダリングするときに IE7 が正しく動作しない場合ですか、それともスクリプトが正しく機能しない場合ですか? これが私が試したことです:

CSS

  1. .js および .no-js 宣言の順序を変更すると、後者が前者をオーバーライドして問題を引き起こしている可能性があると考えられました-NOPE。
  2. IE7がスクリプトを読み取る前に.no-jsスタイルシートを読み取った可能性があるため、スクリプトとスタイルシートの順序を変更します-NOPE。
  3. 宣言の特異性を変更する - おそらくより具体的にすると、IE7 が .js 宣言を読み取るようになります - いいえ。
  4. ドキュメントから .no-js クラスを完全に削除し、IE7 が .js 宣言を読み取ることを期待します。いいえ - .no-js と .js 宣言の両方を単純に無視します。

つまり、IE7 は .js 宣言があるという事実を完全に無視します。だから私はそれが問題を抱えていたスクリプトであるかもしれないと考えました、そしてこれが私がしたことです:

Javascript

  1. <script> に 'type="text-javascript"' を追加しました - 効果なし。
  2. document.documentElement代わりに試しましたdocument.getElementsByTagName('html')[0]-それでも同じです。
  3. 私はvar htmlOrWhat=document.getElementsByTagName("html")[0]; alert(htmlOrWhat);、FF、Chrome、Opera、Safari、IE8 を使用しました。IE9 は「[object HTMLHtmlElement]」を返しますが、IE7 は [object] を返すため、IE7 が <html> 要素を適切に読み取っていないと思います。
  4. 次に、 <html> の id 属性と lang 属性を読み取って、IE7 が実際に要素を適切に読み取っているかどうかをテストしようとしました。はい、これらの属性を正しく取得します。単に .js css 宣言の適用を拒否するだけです。

今のところ、私は頭がいっぱいです (ただし、[オブジェクト] の異常は私の問題に関連していると思われます)。ここ Stackoverflow の誰かが私を助けてくれることを願っています。ここでIE7の何が問題なのか、そしてそれを修正する方法を誰かが正確に指摘できれば、本当に感謝しています. 前もって感謝します。

4

3 に答える 3

3

setAttribute()getAttribute()通常、IE7 以前 (およびそれ以降のバージョンの互換モード) では機能しません。代わりに、要素の className プロパティを使用してください。

document.getElementsByTagName("html")[0].className = "js";

ここにフィドルのデモがあります - http://jsfiddle.net/ajcw/6Yz8x/1/

于 2012-06-26T08:31:22.183 に答える
2

SetAttribute() は、IE7 では期待どおりに機能しません。アイテムの作成後に属性を設定することはありません。IE7 での変更を処理するには、別の方法が必要です。

以下の回答は、className プロパティの使用を提案しています。または、おそらく jQuery を使用することもできます。

(詳細:クラスを削除するための IE7 および setAttribute() )

于 2012-06-26T08:33:38.750 に答える
1

setAttribute() と getAttribute() は IE 7 で壊れています

これをチェックしてください: IE7とsetAttribute()でクラスを削除します

于 2012-06-26T08:39:14.907 に答える