-4

私はこのコードを見つけました。これは私の問題の完璧な解決策ですが、ie9 では機能しないことがわかりました。このコードを IE9 で動作するように書き直す方法を知っている人はいますか? ここにそのためのJavaScriptコードがあります。

function showonlyonev2(thechosenone) {
    var newboxes = document.getElementsByTagName("div");
    for (var x = 0; x < newboxes.length; x++) {
        name = newboxes[x].getAttribute("class");
        if (name == 'newboxes-2') {
            if (newboxes[x].id == thechosenone) {
                if (newboxes[x].style.display == 'block') {
                    newboxes[x].style.display = 'none';
                }
                else {
                    newboxes[x].style.display = 'block';
                }
            } else {
                newboxes[x].style.display = 'none';
            }
        }
    }
}

jsFiddle で実行したところ、次のエラーが発生しました: 行 4 文字 9 での問題: 読み取り専用。

name = newboxes[x].getAttribute("クラス");

また、ここに HTML 部分があります (短いバージョンでは head タグと body タグが削除されています)。

<table>
   <tr>
      <td>
         <div style="border: 1px solid blue; background-color: #99CCFF; padding: 5px; width: 150px;">
            <a id="myHeader1" href="javascript:showonlyone('newboxes1');" >show this one only</a>
         </div>
         <div class="newboxes" id="newboxes1" style="border: 1px solid black; background-color: #CCCCCC; display: block;padding: 5px; width: 150px;">Div #1</div>
      </td>
      <td>
         <div style="border: 1px solid blue; background-color: #99CCFF; padding: 5px; width: 150px;">
            <a id="myHeader2" href="javascript:showonlyone('newboxes2');" >show this one only</a>
         </div>
         <div class="newboxes" id="newboxes2" style="border: 1px solid black; background-color: #CCCCCC; display: none;padding: 5px; width: 150px;">Div #2</div>
      </td>
      <td>
         <div style="border: 1px solid blue; background-color: #99CCFF; padding: 5px; width: 150px;">
            <a id="myHeader3" href="javascript:showonlyone('newboxes3');" >show this one only</a>
         </div>
         <div class="newboxes" id="newboxes3" style="border: 1px solid black; background-color: #CCCCCC; display: none;padding: 5px; width: 150px;">Div #3</div>
      </td>
   </tr>
</table>

ここに私のjsFiddleビューがあります http://jsfiddle.net/Nuker_Viper/JvLDx/13/

4

1 に答える 1

4

あなたの編集は質問をより明確にします:

jsFiddle で実行したところ、次のエラーが発生しました: 行 4 文字 9 での問題: 読み取り専用。

name = newboxes[x].getAttribute("class");

nameどこにも宣言していないのでname、いくつかの包含スコープ (おそらくグローバル スコープなどwindow.name) で使用しています。どうやらIE9はそれを読み取り専用のプロパティと見なしていますが、それをサポートするドキュメントは見つかりません。

いずれにせよ、他人の変数をいじりたくないでしょう。関数var name;の先頭に配置して、独自の変数を使用します。:-)


何がうまくいかなかったのかを推測しなければならなかったときの元の答え:

IE にclassclassNamegetAttribute. IE9 は、誤った名前の「互換性」モードでこのバグを継続します。標準モードでは、それは正しくなります。

属性を使用getAttributeする必要がないため、問題を完全に回避することをお勧めします。class代わりに Reflected プロパティを使用します。

name = newboxes[x].className;
于 2012-07-10T15:55:13.447 に答える