javascript - 关于DOM中Nodelist的问题

查看:68
本文介绍了javascript - 关于DOM中Nodelist的问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

问题:div的Nodelist[2][4]所示的文本节点是什么?属于谁?

    <div>this is div
        <h1 id="h1">this is H1</h1>
        <h2>this is H2</h2>
    </div>
    <script type="text/javascript">
        var div = document.getElementsByTagName("div")[0];
        var child_nodes = div.childNodes;
        var h1 = document.getElementsByTagName("h1")[0];

        for (var i=0;i<child_nodes.length;i++) {            // 遍历这个Nodelist,并写入document文档中
                document.write(child_nodes[i]+"<br />")
        }

获得div后,对div调用childNodes返回Nodelist集合并遍历它,得出图中的几个对象,[0]div自身文本节点,[1],[3]h1,h2元素节点,那其中的[2][4]的文本节点是什么?我当时以为是不是h1,h2的文本节点,毕竟childNodes是返回子节点的集合,但是代码推翻了我的想法。

问题:div的Nodelist[2][4]所示的文本节点是什么?属于谁?

    
        alert(child_nodes[0]===div.childNodes[0])                       // true div自身文本节点
        console.log(child_nodes[1]===h1)                                // true 子节点h1
        alert(child_nodes[1].childNodes===h1.childNodes)                // true h1的childNodes返回的集合相同,符合遍历出的元素

        alert(child_nodes[2].nodeValue===h1.childNodes[0].nodeValue)    // false 
        alert(child_nodes[2]===h1.childNodes[0])                        // false

想想也觉得不会是h1,h2的Nodelist,对DIV进行childNodes返回的Nodelist集合包括h1,h2,而h1,h2的文本节点是在自己的Nodelist里。

解决方案

这两个文本节点就是</h1></h2>后面的空白符(换行符)。其实this is div后面也有一个,但这个空白符和字符串合在一起算一个文本节点。既然是div.childNodes搞出来的,肯定都属于div了。

如果是IE来解析这段代码,div.childNodes只有三个,分别是this is div<h1 id="h1">this is H1</h1><h2>this is H2</h2>;如果是其他浏览器,则会有5个子元素,换行或者元素之间有空格都会产生一个文本节点,也即是你所看到的情况。

你可以把换行符都删掉,写成这样,<div>this is div<h1 id="h1">this is H1</h1><h2>this is H2</h2></div>,你就会看到只剩三个子元素了。

以上这些在《JS高程3》里都有描述,你去翻一翻看看,P269

这篇关于javascript - 关于DOM中Nodelist的问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆