我有一些可以在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中,由于childNodes [j]没有任何子代,它变为空。我不知道是什么原因造成的。
i和j都从0开始。
有人知道我在做什么错吗?
最佳答案
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
第二个标记导致了这一点:
- ul
-- (text)
-- li
--- (text)Foo
-- (text)
-- li
--- (text)Bar
-- (text)
而且由于文本节点不能有任何子节点,所以这会导致Javascript静默失败。
可能的解决方案
一种解决方案是去除空的文本节点。我曾经为此问题写过gist。
更新:
Node.normalize()
似乎是一个更可靠的解决方案,但我没有检查它是否具有浏览器兼容性。关于javascript - childNodes []无法像IE7和8一样在IE9中工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14900805/