0

ここで介入が必要です。私はこれについてほとんど頭がおかしくなっているので 0_o

私は IE 9 を使用しており、IE の F12 開発者ツールを使用して、IE8 をテストしようとしています。JavaScript を使用して非常に単純なタスクを実行しています。

なんらかの理由でそれを刺し傷として使用して、内部のhtmlを取得しています。

このような:

<div id="Some_Container_div">

    <div class="Some_Inner_Div_Class">sometext</div>
    <div class="Some_Inner_Div_Class">sometext</div>
    <div class="Some_Inner_Div_Class">sometext</div>

</div>


<script>

var Div_Contaiers_Inner_Html_As_String = document.getElementById('Some_Container_div').innerHTML;

alert(Div_Contaiers_Inner_Html_As_String);

Array_Of_Divs = Div_Contaiers_Inner_Html_As_String.split("</div>");

alert(Array_Of_Divs);

</script>

上記のコードは適切に警告します:

<div class="Some_Inner_Div_Class">sometext</div><div class="Some_Inner_Div_Class">sometext</div><div class="Some_Inner_Div_Class">sometext</div>

次に、2 番目は適切な配列に警告します。

<div class="Some_Inner_Div_Class">sometext,<div class="Some_Inner_Div_Class">sometext,<div class="Some_Inner_Div_Class">sometext,


開発者ツール (f12) を使用して「ブラウザー モード」IE8 に切り替え、「ドキュメント モード」も IE8 に切り替えると、ブラウザーは次のように警告します。

初め:

<DIV class=Some_Inner_Div_Class>sometext</DIV><DIV class=Some_Inner_Div_Class>sometext</DIV><DIV class=Some_Inner_Div_Class>sometext</DIV>
  • 引用符が欠落していることに気付きましたか?
  • 「DIV」という単語が大文字になっていることに注意してください。

次に、同じことを警告します。

<DIV class=Some_Inner_Div_Class>sometext</DIV><DIV class=Some_Inner_Div_Class>sometext</DIV><DIV class=Some_Inner_Div_Class>sometext</DIV>

したがって、文字列を配列に分割することすらないように見えます-理由はわかりません。文字列ではなくなったようです。

開発者ツール (f12) を使用し、「ブラウザ モード」を IE8 のままにし、「ドキュメント モード」も IE9 に切り替えると、再び正常に動作します....

ビル・ゲイツ 0_O

とにかく-助けを求めてここを調べました-開発者ツールでテストするときに、「ブラウザーモード」をIE8に、「ドキュメントモード」もIE8に切り替える必要があると言っている人がいますが、私が理解している説明は見当たりませんどうして。片方または両方を切り替えた場合の違いは何ですか。

その間:

  • これが IE8 で適切に動作するかどうか、誰か教えてもらえますか?
  • なぜ引用符を取り除いているのですか?
  • 開発者ツールのテスト モードで配列を作成しないのはなぜですか?

ありがとうございます : )

4

2 に答える 2

2

簡潔な答え:

互換性の問題です。JScript 5 エンジン (IE7/IE8) には深刻な欠陥がありました。これは、その原因の 1 つです ("属性から s を取り除き、文字列を生成するときに大文字と小文字を変更しinnerHTMLます)。同様に、innerHTML大文字と小文字を区別するため.split("</div>");、文字列を含む文字列と一致させようとして</DIV>失敗します。

.split(/<\/div>/i);代わりに使用してみてください。"これは属性からのの損失を解決しませんが、部分的な修正です。引用符が必要な場合に欠落している引用符と大文字化を修正するように見える関数については、この回答を参照してください。


古いバージョンの IE に対してテストする方法のより大きな問題では:

基本的に、ブラウザ モードは、Internet Explorerがページをレンダリングする方法には何もしません1。ブラウザ モードは、IEがページを取得する方法に影響を与え、サーバーに送信される UserAgent を変更します。

ドキュメント モードは、Trident レンダリング エンジンのバージョンとIE9 Chakra Javascript エンジンまたは JScript エンジンの IE8/IE7 バリアントのどちらを使用するかを変更します。

TL;DR、テスト目的で、ブラウザ モードを IE8 に変更してから、ドキュメント モードがデフォルトで IE8 標準または Quirks に設定されているかどうかを確認してください。コードが機能しない場合は、2 つを切り替えます。コードが機能する場合は、機能するモード ( Quirks モードの場合は Transitional モード、Standards モードの場合は Strict モード)に適した DOCTYPE を設定していることを確認してください。

[1] ブラウザ モードは、ブラウザが条件付きコメントを解釈する方法とデフォルトのドキュメント モード (ブラウザ モードと一致させる) にも影響するため、これだけを変更することは、IE8 がページをどのように解釈するかを理解する良い方法です... しかし、これはX-UA-Compatible メタ タグがあると動作がすぐに壊れるので、それらを使用している場合は、ドキュメント モードを一致するように設定してください。

于 2012-12-08T00:26:12.930 に答える
0

残念ですが、「IE8ブラウザモード」とIE8は本当に違うものです:/

このコードはIE8でも問題なく動作すると思います。

ちなみに、無料のIETesterツールを使用できます。これは、「ブラウザモード」よりもはるかに優れています。

于 2012-12-07T22:22:57.490 に答える