Javascript UL子节点长度不同

Javascript UL子节点长度不同,javascript,Javascript,我有以下代码: <ul id="meganFox"> <li>Frank</li> <li>Jeff</li> <li>Bob</li> </ul> <div id="debug"></div> <script language="javascript"> var nodes = document.getElementById('meganF

我有以下代码:

<ul id="meganFox">
    <li>Frank</li>
    <li>Jeff</li>
    <li>Bob</li>
</ul>
<div id="debug"></div>
<script language="javascript">
var nodes = document.getElementById('meganFox').childNodes;
var el = document.getElementById('debug');
for( var i = 0; i < nodes.length; i++ ){
    el.innerHTML += i +' - '+ nodes[i] +'<br />';
}
alert( nodes.length );
</script>
  • 坦率的
  • 杰夫
  • 鲍勃
var nodes=document.getElementById('meganFox').childNodes; var el=document.getElementById('debug'); 对于(var i=0;i'; } 警报(nodes.length);
Firefox警报:7 0-[对象文本]

1-[对象元素]

2-[对象文本]

3-[对象元素]

4-[对象文本]

5-[对象元素]

6-[对象文本]

IE警报:3

0-[对象]

1-[对象]

2-[对象]

为什么是7号?什么是对象文本,而不仅仅是对象


我的最终目标是捕获关键事件,并使用上下箭头在其中导航。我在伊江工作正常,但由于这个问题,它在FF中不工作。

兼容W3的浏览器认为元素之间的空白是DOM(文本节点)的一部分。 旧版本的IE没有。这就是为什么你在IE中得到3分,而在其他地方得到7分

[object]
输出显然就是IE的
toString()
元素节点所提供的

如果不需要任何文本节点,请在
for
循环中执行此操作

for( var i = 0; i < nodes.length; i++ ){
    if( nodes[i].nodeType === 3 )
        continue;
    else
        el.innerHTML += i +' - '+ nodes[i] +'<br />';
}
for(变量i=0;i';
}
这将消除所有文本节点(而不仅仅是空节点)。要保留非空节点,可以执行以下操作

for( var i = 0; i < nodes.length; i++ ){
    if( nodes[i].nodeType === 3 && !nodes[i].data.replace(/^\s*|\s*$/g, '') )
        continue;
    else
        el.innerHTML += i +' - '+ nodes[i] +'<br />';
}
for(变量i=0;i';
}

我使用的是IE8和IE9,因此它们不是IE的旧版本。我仍在试图找出“空文本节点”的定义。谷歌搜索。哦,哇,我发现这只是代码中的空白。。。我讨厌FFP谢谢你的解决方案@phpmeh:对不起,我应该说元素之间只有空格。其中包括空格、换行符和制表符。我认为IE8是一个旧版本。我以为IE9已经修好了。