javascript - 关于DOM的一个问题,可能很简单
大家讲道理
大家讲道理 2017-04-10 15:13:37
[JavaScript讨论组]
var oul = document.getElementById('myul'),
    oli = oul.getElementsByTagName('li');//添加li前获取
console.dir(oli);//添加li前输出
//添加li
var create = function(){
    for(var i = 0;i < 5;i++){
        var li = document.createElement('li');
        oul.appendChild(li);
    }
}();
var newli = oul.getElementsByTagName('li');//添加li后获取
console.dir(newli)//添加li后输出
console.log(newli === oli);// true

上面这段代码输出结果:

不是很理解,为什么添加Li操作前后获取的li的HTMLCollection是一样的

补充:console.log()输出

大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

全部回复(2)
阿神

应该是oli和newli指向的是同一个Object,然而console.dir(object)这个方法,当object中的属性有变化时,之前所有console.dir(object)也会跟着变化。
例如:

var test = {
    1:test
};
console.dir(test);
test.2 = test;
console.dir(test);

所以楼上换了一种输出的方法,就能看出前后的不同了。
我是这么理解的。

黄舟

olinewli是指向同一个对象,因此console.dir(oli == newli)会为true,上面的dom操作可以想象成如下代码:

var oul = {li:[]};
var oli = oul.li;
console.dir(oli);
oul.li.push({}, {}, {}, {}, {});
var newli = oul.li;
console.dir(newli);
console.dir(oli == newli);

至于两次li的输出结果,可以看stackoverflow上的这篇文章,大抵的意思是说,chrome和firfox对console的实现还存在一点bug

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

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