应该';JavaScript不能忽略空白吗?Firefox中的节点怪癖
我在firefox的最新版本中遇到了这个“bug”,我不知道是什么导致了这种行为,也不知道哪个是正确的结果 HTML应该';JavaScript不能忽略空白吗?Firefox中的节点怪癖,javascript,html,firefox,dom,case-sensitive,Javascript,Html,Firefox,Dom,Case Sensitive,我在firefox的最新版本中遇到了这个“bug”,我不知道是什么导致了这种行为,也不知道哪个是正确的结果 HTML <div><h1 id="heading">First Title</h1></div><div><h1>Second Title</h1></div> 我得到的结果如下: 这就是怪癖。如果在HTML代码中添加空格并运行相同的脚本,则会得到以下结果: 新建HTML。JavaScri
<div><h1 id="heading">First Title</h1></div><div><h1>Second Title</h1></div>
我得到的结果如下:
这就是怪癖。如果在HTML代码中添加空格并运行相同的脚本,则会得到以下结果:
新建HTML。JavaScript保持不变
<div>
<h1 id="heading">First Title</h1>
</div>
<div>
<h1>Second Title</h1>
</div>
第一个标题
第二名
新结果:
我认为JavaScript对空格不敏感。那么为什么它会将节点长度从1更改为3呢
我认为JavaScript对空格不敏感。那么为什么它会将节点长度从1更改为3呢
Firefox运行正常
这不是JavaScript问题。DOM将“仅空白”区域计算为文本节点,因此JavaScript正确地返回它找到的所有子节点
旧的IE表现不同,只有空白区域会被忽略。这一点自IE9以来已得到纠正
基本上,页面中出现的任何内容都表示为DOM节点
我个人更喜欢压缩我的HTML。它不仅减少了下载时间,而且还使DOM更小,占用内存更少,需要处理的不需要的节点更少。您可以使用而不是childNodes
,因为您引入了一些文本节点(是的,它们是类型为3的节点,而不仅仅是一些空格)而childNodes
将返回所有节点
console.log(allDivNodes[0].children.length);
或者使用childNodes,您可以循环并忽略具有nodeType==3
的节点
同样,您还有一个将提供childElement计数并忽略文本节点的函数。也就是说,因为childNodes也包括文本节点。格式化后,您引入了一些文本节点。@PSL,但感觉它违反了整个JavaScript不区分空格的规则。空格是HTML格式,而不是JavaScript格式。在本例中,它由HTML规范调用,在大多数情况下被忽略。但这些文本节点仍然保留在DOM树中。我现在明白了。非常感谢。那么,儿童是儿童节点的全面替代品吗?或者childNodes是否具有children没有的功能?childNodes将让您看到实际的文本子对象,这是您经常需要的。
console.log(allDivNodes[0].children.length);