javascript - DOM重新被解析
天蓬老师
天蓬老师 2017-04-11 11:12:06
[JavaScript讨论组]

当点击触发function a的时候,发现一开始控制台打印的是空,然后才是document文档
如下图所示:

发现浏览器重新解析了dom,我想问,在点击之前,dom不是已经被解析了吗,为什么当执行函数的时候,dom重新被解析和渲染?

附上代码:

//css
    
//html
  
    

啊啊啊啊啊啊啊啊啊啊啊

  

啊啊啊啊啊啊啊啊啊啊啊啊啊啊

  

啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊

  

啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊

   //js
天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

全部回复(2)
伊谢尔伦

webkit内核对console.log()会延迟执行,惰性求值,换成alert就可以看到是立即显示dom的。
参考链接

高洛峰

贴测试代码,和测试方法与原因猜测。

  <body>
    <p class="box1">p p</p>
  </body>

  <script type="text/javascript">
    var doc = document.querySelectorAll('.box1')[0];
    //var doc = document.getElementsByClassName('box1')[0];
    console.log(doc,doc.innerHTML);
    doc.innerHTML = 'test';
    for(var a=0;a<4000;a++){
        console.log(1)
    }
  </script>

测试方法:先注释掉 doc.innerHTML = 'test',正常打开网页,打开控制台,去掉注释,刷新页面。

结果:
1.第一行:“ ,p p”;
2.for循环开始输出‘1’;
3.for循环未走完页面上p p变为‘test’;
4.循环走完,第一行变为“p.box1,p p”;

说明:本来以为querySelectorAllgetElementsByClassName前者为静态接口,后者为动态接口,是动态接口引起的,测试发现不是。

猜测:可以看到js未走完没有正确输出“p.box1,p p”,所以猜测与异步有关,可能是控制台的数据显示是异步或者选择器有相关的异步模块?但是控制台为正常输出时,页面内容已经发生了变化,说明正确dom在js未走完时已经被正确查找了。所以猜测可能是浏览器多线程和模块引起的。如果能找到相关资料再来补充。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号