老师用previousSibling 遍历节点,我试了一下,没有节点是null,前一个兄弟节点是空白文本啊?

老师用previousSibling 遍历节点,我试了一下,没有节点是null,前一个兄弟节点是空白文本啊?

 <div id="box">

        <p id="para1">我是段落A</p>

        <p id="para2">我是段落B

            <span>A1</span>

            <span>A2</span>

            <span>A3</span>

        </p>

        <p id="para3">我是段落C</p>

    </div>


    <script>

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

        var para1 = document.getElementById('para1');

        console.log(para1.previousSibling);  // 这个显示出来的是#text

https://img1.sycdn.imooc.com//climg/61a1aa7309602e7a11620623.jpg

正在回答

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

1回答

同学你好,解答如下:

由于如下两个元素并不在一行显示(换行显示):

https://img1.sycdn.imooc.com//climg/61a1c6690959a48706270161.jpg

所以para1前面是有兄弟节点的,该节点是换行产生的空白节点text:

https://img1.sycdn.imooc.com//climg/61a1c69909a5ace002860086.jpg

如果二者在一行显示,则结果是null:

https://img1.sycdn.imooc.com//climg/61a1c6ad095e982e07270115.jpg

https://img1.sycdn.imooc.com//climg/61a1c6b309cc579d05970195.jpg

所以要分情况考虑。

祝学习愉快!

  • 慕田峪1427181 提问者 #1

    https://img1.sycdn.imooc.com//climg/61a2ed9a0996b5ab19201079.jpg

    我问的是这个while这个循环语句, previousSibling !=null  ;  

    当前一个兄弟节点是text  ==null然后返回的 fales , !=就是true 这个循环会继续里边的语句,

    那么,  用previousSibling循环前面的节点,不都是text吗?都是空文本,

    我不明白的是怎么会返回 null == null然后返回的true  !=null  就是fales, 就会结束循环,

    我去测试了一下前一项没有返回null的可能,我的疑问就在这里,

    然后我又仔细看了一下循环体里边的 这个if(o.previousSibling.nodeType == 1) {

     意思就是查到 元素节点后 就返回return o.previousSibling  然后就结束语句循环

    } 我可不可以理解为老师写的这个是死循环,靠 return 去暂停语句?



    2021-11-28 10:59:46
  • 好帮手慕然然 回复 提问者 慕田峪1427181 #2

    同学你好,理解的有点问题,前一项兄弟节点是有可能返回null的,即最后一个#text节点的前面不再有兄弟节点,此时就会返回null,如图

    https://img1.sycdn.imooc.com//climg/61a2f5b70994aada13430227.jpg

    所以while循环不是死循环,return语句只是在找到想要的节点时(即nodeType为1的节点),终止循环,不再继续循环。

    祝学习愉快!

    2021-11-28 11:25:49
  • 慕田峪1427181 提问者 回复 好帮手慕然然 #3

    https://img1.sycdn.imooc.com//climg/61a2fbdb09d5b0a808940450.jpg

    我测试用

      console.log(para1.previousElementSibling); 就会返回null 


    https://img1.sycdn.imooc.com//climg/61a2fc200916482108080352.jpg

    我明白了,关键就在这一句, 这句的含义就是让while循环称为前一项,查找到para1的时候前一项就会返回null

    o = o.previousSibling


    https://img1.sycdn.imooc.com//climg/61a2fc400930004707950271.jpg

    2021-11-28 11:51:45
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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