childNodes []在IE9和8中没有在IE9中工作

时间:2013-02-15 18:11:49

标签: javascript internet-explorer internet-explorer-9

我有一些代码适用于IE7和8但不适用于9

var table = document.getElementById('RadGrid_ctl01').childNodes[2];

这在IE9中不起作用,现在我确实读过IE9计算空格等等,因此索引与IE7和IE8中的索引不一样所以我调试并找到相同的值,当我将索引从2改为4喜欢这样:

var table = document.getElementById('RadGrid_ctl01').childNodes[4];

然而,当我稍后尝试使用此代码访问表对象时

var editor = table.childNodes[i].childNodes[j].childeNodes[0]

变量编辑器将在IE7和IE8中获得预期值,但在IE9中它变为null,因为childNodes [j]没有任何子节点。我不知道是什么原因引起的。 i和j都从0开始。

任何人都知道我做错了什么?

1 个答案:

答案 0 :(得分:4)

IE9的行为是正确的,较低版本是错误的。 这个问题是由两个html标签之间的空白引起的,这些标签应该导致文本节点。

更新:添加了示例

<ul><li>Foo</li><li>Bar</li></ul>

<ul>
    <li>Foo</li>
    <li>Bar</li>
</ul>

看起来几乎一样,不是吗?然而,由此产生的DOM不同。 第一个例子将导致:

- ul
-- li
--- (text)Foo
-- li
---(text)Bar

虽然第二个Markup导致了这一点:

- ul
-- (text)
-- li
--- (text)Foo
-- (text)
-- li
--- (text)Bar
-- (text)

由于文本节点不能有任何子节点,这会导致您的Javascript无声地失败。

可能的解决方案

一种解决方案是去除空文本节点。我曾为此问题写过gist

<强>更新

Node.normalize()似乎是一个更可靠的解决方案,但我没有检查浏览器兼容性。