DOM 内の単一のテーブルを見つけて、その最初の子を操作しようとする Javascript コードがありますthead
(実際には、その子の子であるtr
エントリを反復処理しますが、それは質問にとって重要ではありません)。これを行うコードは次のとおりです。
var tableNode = document.getElementById("table").firstChild;
これは Firefox ESR (10/17/24) と IE9 では正常に動作しますが、IE10 では失敗します。その理由は、IE10 が奇妙な DOM エントリを挿入しており、それfirstChild
が目的のthead
. tableNode.data
これは、文字列型に設定されているという事実とともに、以下の DOM ダンプに基づいています。
IE10 互換モード (動作する場合) の DOM は次のようになります。
DOM が実際に理にかなっているように見えることがわかります。ただし、通常の IE10 モードで DOM を調べると、次のようになります。
それだけの価値があるため、Chrome は次のことを提供してくれます。
そしてFF17esrは私に与えます:
どちらも空のテキスト要素を持っていないようです。
現在、サイトを互換モードで実行できますが、それをすべての顧客に伝えなければならないのは煩わしいことです。どうやら恐ろしいものを追加することもできます:
<meta http-equiv="X-UA-Compatible" content="IE=9">
私の出力にはありますが、他にどのような影響があるかは完全にはわかりません。
まず、IE9/FF/IE10compat では追加されていないのに、IE10 ではこれらのノードが追加されている理由を理解したいと思います。HTMLの空白が原因である可能性があるという議論がいくつかありますが、これによりランダムなノードが作成されることはないように思われます。いずれにせよ、余分な白はないと思いますスペース。上記の string 型の値は実際にはであることに言及する必要がありますが、これは、行末の改行がこの DOM エントリを作成している可能性があることを意味します。tableNode.data
\n
しかし、正直なところ、それはばかげているようです。私が知る限り、HTML はタグの外側の空白を無視するか、少なくとも 1 つの要素に折りたたむようになっています。次のようなことを信じるのは難しいと思います:
<tag>line 1</tag>
<tag>line 2</tag>
それらの間に改行があるという理由だけで、 ,との3 つのDOM エントリが生成されます。tag
empty node
tag
これを最もよく解決する方法についてのアイデアはありますか? これらの DOM エントリをスキップするには、Javascript コードを変更する必要がありますか?