2

単純なHTML5DOM処理をMSIE9で機能させるのに問題があります。DOCTYPEタグがなくても機能します。ただし、DOCTYPE html(html5を示す)が含まれているため、MSIE9はそれを処理しません。html5として機能するようにこれを行うことができる別の方法はありますか?

このコードは、DOMノードを取得し、そこからタグ名で要素を取得することにより、nodeListを作成しようとします。簡単なテストは、nodeList.lengthを表示することです。これは、私が構築しているアプリケーションでより大きな問題と見なしているものの小さなサンプルです。しかし、この小さなコードは、私のアプリケーション全体を紹介するよりも、ここで紹介する方がよいと思います。

次のコードは、Chrome、Firefox、Operaなどで機能しますが、MSIE 9では機能しません。オンラインでもあるので、このリンクをクリックして(実行している限り)試してみてください。次に、アドレスをコピーして他のブラウザで試してください。「<!DOCTYPEhtml>」も削除しました。MSIEで動作します。しかし、その場合、ブラウザはそれがhtml5であることを認識しません(私が正しく理解している場合)。

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<script type="text/javascript">
function setOptions () {

  var ndiv = document.getElementById("products");
  var OptionList = ndiv.getElementsByTagName("option");

 document.getElementById("dump").innerHTML = "OptionList.length " + OptionList.length;

}
</script>
</head>
<body onload="setOptions()">
<br/><br/><br/>
<div id="dump"></div>
<div id="products" style="display:none">
  <option>MOTOR</option>
  <option>CHASSI</option>
  <option>ELECTRIC</option>
  <option>BRAKES</option>
  <option>TIRES</option>
</div>
</body>
</html>
4

1 に答える 1

3

無効なマークアップを使用しています。オプション要素はdiv要素の子であってはなりません。製品のIDを持つdiv要素を代わりにselect要素に変更すると、期待どおりに機能します。

IE9にはHTML5パーサーがないため、無効なマークアップで何が起こるかを保証することはできず、このような予期しない結果が発生する可能性があります。IE10にはHTML5パーサーがあるため、他のブラウザーと同様にエラーケースを処理します。

于 2013-01-17T23:09:50.457 に答える