0

似乎 IE10 破坏/更改了 HTML 层次结构。这可以通过以下示例更好地解释

<html>
<head>
<title>IE10 example</title>
</head>
<body>
<script language="javascript">
     function submitForm() {
         var temp;
         temp = document.getElementById("myTable");
         alert(temp.innerHTML);
     }
   </script> 
<table id="myTable">
<thead>
  <tr>
    <td>First Name</td><td>Last Name</td>
  </tr>
</thead>
<tbody >
  <form action="/users" method="post" name="userform">
    <input type="hidden" name="userName">
    <tr>
      <td>admin</td>
    </tr>
    <tr>
      <td>SA</td>
    </tr>
  </form>
</tbody>
</table>
<script language="javascript">
      submitForm()
</script> 
</body>
</html>

如果将上述 HTML 页面加载到 IE10 中,表单节点会在输入节点之前关闭。因此,对任何输入节点的任何访问都会失败,并出现 NULL/未定义错误。此 HTML 在 Mozilla、Chrome、IE9、IE10 可比性模式下按预期加载。

这种行为是预期的吗?感谢您的时间和帮助

4

1 回答 1

1

这不是 IE10 独有的。DOM 在 IE10、Chrome、Opera 和 Firefox 中的结果相同。通过复制上面显示的标记,在我所做的测试中输入之前全部关闭表单:

https://dl.dropbox.com/u/444684/stackoverflow/test.html

第一个问题是您缺少文档类型。这将使浏览器进入 quirksmode,这意味着它不会按照标准呈现,并且规则更加灰色。为了更好的跨浏览器一致性,您应该在文档顶部添加一个 HTML5 文档类型:

下一个问题是不允许表单成为 tbody 元素的直接子元素。由于它是无效的,它遵循 HTML5 解析算法并关闭表单。为避免这种移动表单,例如使其成为表的父级。

https://dl.dropbox.com/u/444684/stackoverflow/test2.html

如果您查看浏览器调试器,例如 IE 中的 F12,您会看到输入现在位于表单内。您也不再需要警报,因为 DOM 检查器是一种更容易调试的方法。

于 2012-12-20T19:13:14.310 回答