html5 msie javascript让DOM处理在MSIE中工作

时间:2013-01-17 14:34:38

标签: javascript html5 internet-explorer dom

我在使用简单的HTML5 DOM处理在MSIE 9上工作时遇到问题。它没有DOCTYPE标记。但是包含DOCTYPE html(表示html5),MSIE 9不会处理它。有没有其他方法可以做到这一点,以便它作为html5?

代码尝试通过获取DOM节点并通过标记名称从中获取元素来创建nodeList。简单的测试是显示nodeList.length。这是我在我正在构建的应用程序中看到的一个较大问题的一个小样本。但是,我认为,这一小段代码更好地呈现在这里,而不是试图向您展示我的整个应用程序。

以下代码适用于Chrome,Firefox,Opera以及更多内容......但不适用于MSIE 9.我也在线使用,因此您只需点击this link(只要我正在运行)并尝试一下;然后复制地址以在其他浏览器中尝试。我还删除了“<!DOCTYPE html>”然后它在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>

1 个答案:

答案 0 :(得分:3)

您使用的是无效标记。选项元素不应该是div元素的子元素。如果您将具有产品ID的div元素更改为select元素,它将按预期工作。

由于IE9没有HTML5解析器,因此您无法保证无效标记会发生什么,并且可能会发生这种意外结果。 IE10有一个HTML5解析器,因此可以根据其他浏览器处理错误情况。