Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
应该';JavaScript不能忽略空白吗?Firefox中的节点怪癖_Javascript_Html_Firefox_Dom_Case Sensitive - Fatal编程技术网

应该';JavaScript不能忽略空白吗?Firefox中的节点怪癖

应该';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

我在firefox的最新版本中遇到了这个“bug”,我不知道是什么导致了这种行为,也不知道哪个是正确的结果

HTML

<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);