第三个小例子,返回元素的所有元素兄弟节点

第三个小例子,返回元素的所有元素兄弟节点

代码中,两条whilie语句之间,o = node; 这个不太理解,为什么要加上这条语句呢?前面不是使用局部变量var o = node定义过了么?为什么还需要重新赋值

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕慕子 2021-09-29 10:04:22

同学你好,因为while循环中,改变了o的值,保证每次循环都是根据上一次循环查找到的元素去查找它的兄弟元素,以第一个while循环为例,如下图所示:

https://img1.sycdn.imooc.com//climg/6153c90909b4fc3c08160392.jpg

所以var o = node 这句代码是将传入的node节点赋值给o,在while循环中对o进行操作,保证传入的节点node不被改变,然后,在查找完指定元素的前面的兄弟节点之后,再将node重新赋值给变量o,这样才可以从传入的节点para开始查找它后面的兄弟元素。

祝学习愉快~

  • 提问者 怒焰狂暴 #1

    不是这呢,是以下这段代码

    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;  // 是这个 o = node


                // 遍历node的后面的节点

                while(o.nextSibling != null) {

                    if(o.nextSibling.nodeType == 1){

                        nexts.push(o.nextSibling);

                    }

                    o = o.nextSibling;

                }


                // 将两个数组进行合并,然后返回

                return prevs.concat(nexts);

            }

    两条while语句之间不是有一个 o = node么,是这里为什么需要重新赋值

    2021-09-29 10:06:43
  • 好帮手慕慕子 回复 提问者 怒焰狂暴 #2

    同学你好,可以再看一下老师第一次回复的内容哦,老师就是针对同学粘贴的这段进行回复的。

    因为在第一个while循环中,执行o = o.previousSibling; 这句代码后,此时的o就再表示传入的node节点了,所以在查找完指定元素的前面的兄弟节点之后,需要将node重新赋值给变量o,即: o = node,这样在执行第二个while时,才是从传入的节点node开始查找它后面的兄弟元素。

    祝学习愉快~

    2021-09-29 10:29:48
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师