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已经修好了。