js节点操作

摘要:整个页面可以看成文档节点,节点用node表示。页面里面全是节点,元素节点, 属性节点,文本节点(文字,空格,换行),节点:一定有节点类型,节点名称,节点值

整个页面可以看成文档节点,节点用node表示。页面里面全是节点,元素节点, 属性节点,文本节点(文字,空格,换行),

节点:一定有节点类型,节点名称,节点值
节点类型的值: 元素节点为1,属性节点为2,文本节点为3

通过节点,可以更好的获取元素。逻辑全在代码里面

<body>
    <div class="con">
        <ul>
            <li class="item3"></li>
            <li class="item4"></li>
            <li class="item5"></li>
            <li class="item6"></li>
        </ul>

        <ol>
            <li class="item7"></li>
            <li class="item8"></li>
            <li class="item9"></li>
            <li class="item10"></li>
        </ol>

    </div>

js部分 

<script>
        //我想要获取ul下面的所有li
        var ulele = document.querySelector("ul");
        var lis = ulele.querySelectorAll("li"); //获取了4个li没毛病
        //console.log(lis);
        //假如获得了ul里面的li,那如何重新获得ul元素节点呢?

        console.log(lis[1].parentNode); //获取的是离这个元素最近的爸爸,而不是爷爷

        //获取ol下所有的li元素节点
        var olele = document.querySelector("ol");
        console.log(olele.childNodes); //[text, li.item7, text, li.item8, text, li.item9, text, li.item10, text] 得到的结果,为什么会有九个节点呢?
        //因为childNodes获取的是所有的节点,包括元素节点,文本节点

        //要想获取元素节点
        for (var i = 0; i < olele.childNodes.length; i++) {
            if (olele.childNodes[i].nodeType == 1) { //元素节点的节点类型值为1,属性节点的节点类性质为2,文本节点的节点类性质为2
                console.log(olele.childNodes[i]);

            }
        }
        //好麻烦呀
        //别慌,有直接获取元素节点的操作
        console.log("-----------------华丽的分割线----------------------");
        console.log(olele.children); //元素.children直接获取元素节点

        console.log("--------节点操作之第一个元素和最后一个元素---------");
        //获取ul下的第一个元素
        var firstulli = ulele.firstChild;
        console.log(firstulli); //结果#text  什么?获取的竟然是文本节点?        
        console.log(ulele.lastChild); //结果#text  什么?获取的竟然是文本节点?

        //办法其一: 

        console.log(ulele.firstElementChild); //直接获取元素节点,但是兼容性不好
        console.log(ulele.lastElementChild);


        console.log("---------------------实际开发中的做法-----------------------");
        console.log(ulele.children[0]);
        console.log(ulele.children[ulele.children.length - 1]);
    </script>

长话短说:

子节点.parentNode得到的是直接父元素
父元素.childNodes得到的是所有子节点,包括元素节点,文本节点,父元素.children得到的是元素节点
父元素.firstChild得到的是第一个节点,经常是文本节点,因为需要换行空格嘛,父元素.firstElementChild得到父元素的第一个元素节点,但兼容性不好
实际开发中做法:先用children得到所有元素节点,再用伪数组的索引来取得相应位置的元素


本文内容仅供个人学习、研究或参考使用,不构成任何形式的决策建议、专业指导或法律依据。未经授权,禁止任何单位或个人以商业售卖、虚假宣传、侵权传播等非学习研究目的使用本文内容。如需分享或转载,请保留原文来源信息,不得篡改、删减内容或侵犯相关权益。感谢您的理解与支持!

链接: https://shenqiku.cn/article/FLY_4904