我有一段 Javascript 代码可以在 DOM 中定位单个表,然后尝试操作它的第一个子表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">
到我的输出,但我不完全确定可能有什么其他影响。
我想首先了解为什么IE10 会添加这些节点,而 IE9/FF/IE10compat 却没有。我发现有一些讨论表明 HTML 中的空格可能是导致它的原因,但在我看来,这不应该导致创建随机节点,而且无论如何,我认为我没有任何多余的白色空间。虽然我应该提到上面提到的字符串类型的值实际上tableNode.data
是\n
,这意味着行尾的换行符可能正在创建这个 DOM 条目。
但是,老实说,这似乎很荒谬。据我所知,HTML 应该忽略标签之外的空格,或者至少将其折叠成一个元素。我很难相信这样的事情:
<tag>line 1</tag>
<tag>line 2</tag>
会产生三个DOM 条目,,tag
只是因为它们之间有一个换行符。empty node
tag
关于如何最好地解决这个问题的任何想法?我是否必须修改我的 Javascript 代码才能跳过这些 DOM 条目?