2

我在获取简单的 HTML5 DOM 处理以在 MSIE 9 上工作时遇到问题。它在没有 DOCTYPE 标记的情况下工作。但是由于包含 DOCTYPE html(表示 html5),MSIE 9 不会处理它。有没有另一种方法可以做到这一点,以便它像 html5 一样工作?

该代码尝试通过获取 DOM 节点并通过标签名称从中获取元素来创建 nodeList。简单的测试是显示 nodeList.length。这是我认为正在构建的应用程序中的一个较大问题的一个小示例。但我认为,在这里展示一小段代码要比向您展示我的整个应用程序要好。

以下代码适用于 Chrome、Firefox、Opera 和可能更多...但不适用于 MSIE 9。我也有它在线,所以您只需单击此链接(只要我正在运行)并尝试它;然后复制地址在其他浏览器中尝试。我还删除了“<!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>
4

1 回答 1

3

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

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

于 2013-01-17T23:09:50.457 回答