1

IE7 と 8 では動作するが 9 では動作しないコードがいくつかあります

var table = document.getElementById('RadGrid_ctl01').childNodes[2];

これはIE9では機能しません。IE9では空白などをカウントすることを読みました。したがって、インデックスはIE7およびIE8と同じではないため、インデックスを2から4に変更したときにデバッグして同じ値を見つけました。 :

var table = document.getElementById('RadGrid_ctl01').childNodes[4];

ただし、後でこのコードでテーブルオブジェクトにアクセスしようとすると

var editor = table.childNodes[i].childNodes[j].childeNodes[0]

変数エディターは IE7 と IE8 では期待される値を取得しますが、IE9 では childNodes[j] に子がないため null になります。何が原因なのかわかりません。i も j も 0 から始まります。

私が間違っていることを知っている人はいますか?

4

1 に答える 1

4

IE9の動作は正しく、下位バージョンは間違っています。この問題は、2つのhtmlタグ間の空白が原因で発生します。空白はテキストノードにつながるはずです。

更新:例を追加

<ul><li>Foo</li><li>Bar</li></ul>

<ul>
    <li>Foo</li>
    <li>Bar</li>
</ul>

見た目はほとんど同じですね。ただし、結果のDOMは異なります。最初の例は次のようになります。

- ul
-- li
--- (text)Foo
-- li
---(text)Bar

2番目のマークアップはこれにつながりますが:

- ul
-- (text)
-- li
--- (text)Foo
-- (text)
-- li
--- (text)Bar
-- (text)

また、テキストノードは子ノードを持つことができないため、これによりJavascriptがサイレントに失敗します。

考えられる解決策

1つの解決策は、空のテキストノードを取り除くことです。私はかつてこの問題の要点を書きました。

アップデート:

Node.normalize()より信頼性の高いソリューションのようですが、ブラウザの互換性を確認していません。

于 2013-02-15T18:26:30.533 に答える