【备战春招】第1天 前端工程师2022版

2023/2/8 4:24:15

本文主要是介绍【备战春招】第1天 前端工程师2022版,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

课程名称:节点的关系、封装节点关系函数

课程章节:JS函数与DOM

课程讲师: 未知

课程内容:

  1. 节点之间的关系

    1-1


https://img3.sycdn.imooc.com/63e0bb450001449708160381.jpg

    1-2

        https://img1.sycdn.imooc.com/63e0bc170001569d05750411.jpg

2. 注意:文本节点也属于节点

            DOM中,文本节点也属于节点,在使用节点的关系使一定注意

            在标准的W3C规范中,空白文本节点也算作节点。IE8及以前浏览器例外。

3. 排除文本节点的干扰

https://img3.sycdn.imooc.com/63e0bcf10001164107500337.jpg

4.代码演示

// html
<div id="box">
    <p>我是段落A</p>
    <p id="para">我是段落B</p>
    <p>我是段落B</p>
</div>
// js
var box = document.geElementById('box')
var para = document.geElementById('para')
console.log(box.childNodes);
// NodesList(7) [text, p, text, p#para, text, p, text]
// 上面text为空文本
console.log(box.children); // (IE9开始兼容)
// HTMLCollection(3) [p, p#para, p, para: p#para]

// 第一个子节点
console.log(box.firstChild) // #text (空白文本节点)
console.log(box.firstChild.nodeType) // 3
console.log(box.firstElementChild) // <p>我是段落A</p>

// 父节点
console.log(para.parentNode) // <div id="box">...</div>

// 前一个兄弟节点
console.log(para.previousSibling) // #text (空白文本节点)
console.log(para.previousElementSibling) // <p>我是段落A</p>

5. 书写常见的节点关系函数

         5-1  书写IE6也能兼容的“寻找所有元素子节点”函数

         5-2  书写IE6也能兼容的“寻找前一个元素兄弟节点”函数

         5-3  如何编写函数,获得某元素的所有兄弟节点?

6. 代码演示

    <div id="box">
        <p>我是段落</p>
        <p>我是段落</p>
        <p>我是段落</p>
        <p id="fpara">我是段落fpara</p>
        我是文本
        <!-- 我是注释 -->
        <p id="para">
            我是段落para
            <span>1</span>
            <span>2</span>
            <span>3</span>
        </p>
        <p>我是段落</p>
        <p>我是段落</p>
        <p>我是段落</p>
    </div>


        var box = document.getElementById('box');
        var para = document.getElementById('para');
        var fpara = document.getElementById('fpara');

        // 封装一个函数,这个函数可以返回元素的所有子元素节点(兼容到IE6),类似children的功能
        function getChildren(node) {
            // 结果数组
            var children = [];
            // 遍历node这个节点的所有子节点,判断每一个子节点的nodeType属性是不是1
            // 如果是1,就推入结果数组
            for (var i = 0; i < node.childNodes.length; i++) {
                if (node.childNodes[i].nodeType == 1) {
                    children.push(node.childNodes[i]);
                }
            }
            return children;
        }

        console.log(getChildren(box));
        console.log(getChildren(para));

        // 封装一个函数,这个函数可以返回元素的前一个元素兄弟节点(兼容到IE6),类似previousElementSibling的功能
        function getElementPrevSibling(node) {
            var o = node;
            // 使用while语句
            while (o.previousSibling != null) {
                if (o.previousSibling.nodeType == 1) {
                    // 结束循环,找到了
                    return o.previousSibling;
                }

                // 让o成为它的前一个节点,就有点“递归”的感觉
                o = o.previousSibling;
            }
            return null;
        }

        console.log(getElementPrevSibling(para));
        console.log(getElementPrevSibling(fpara));

        // 封装第三个函数,这个函数可以返回元素的所有元素兄弟节点
        function getAllElementSibling(node) {
            // 前面的元素兄弟节点
            var prevs = [];
            // 后面的元素兄弟节点
            var nexts = [];
            var o = node;
            // 遍历node的前面的节点
            while (o.previousSibling != null) {
                if (o.previousSibling.nodeType == 1) {
                    prevs.unshift(o.previousSibling);
                }
                o = o.previousSibling;
            }

            o = node;

            // 遍历node的后面的节点
            while (o.nextSibling != null) {
                if (o.nextSibling.nodeType == 1) {
                    nexts.push(o.nextSibling);
                }
                o = o.nextSibling;
            }

            // 将两个数组进行合并,然后返回
            return prevs.concat(nexts);
        }

        console.log(getAllElementSibling(para));

课程收获

老师讲的非常细致,内容虽然多,但好在易于理解。DOM基础之前看过一遍,现在再拿出来学习感觉理解起来更容易一点了,现在还只是简单的基础知识,只要记忆就行,基本上看完视频,自己练几遍就能记住。希望后面做到相关练习时,能有自己的思路,不再是依样画瓢,加油!

https://img1.sycdn.imooc.com/63e0ceb60001ef0107740421.jpg





这篇关于【备战春招】第1天 前端工程师2022版的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程