appendChild(para);para对象用过一次后为什么不能重复用?

appendChild(para);para对象用过一次后为什么不能重复用?,第1张

每次引用对象时,其实都是调用对象的内存地址,所以在循环中对一个对象添加多次,其实都是添加的同一个对象的内存地址,实际对象的数量并没有增加,就好比你对你女朋友连说六次爱你,不等于就有6个女朋友吧?所以必须在每次循环时都重新创建一个新的对象,这样系统就会为这个新对象分配新的内存空间,然后再添加到父元素中才算是真正的添加。

其实你对“对象能否重复使用”的理解是错误的,对象肯定是能够重复使用的,但每次使用都只能是这个对象本身,而不能把同一个对象当作不同的多个对象来使用,你在A地使用了对象甲,再想把它用在B地,那么A地的对象甲就会自动消失,也就是说对象甲不可能同时在A地和B地为你服务!你只能通过新建或克隆的方式再造一个对象乙,然后让它们在两地分别为你服务,这样才行!

如果你把“对象”想象成现实生活中的一个“人”,你就能很好地理解我上面说的话了

需要给DOM中添加新的元素,避免创建一个元素添加一次。应尽量只添加一次

// bad code

$.each(aArray, function(i, item) {

var newListItem = '<li>' + item + '</li>'

$('ul').append(newListItem)// 这里每append一次都将会重载DOM

})

// better code

var frag = document.createDocumentFragment()// 创建文档碎片

$.each(aArray, function(i, item) {

var newListItem = '<li>' + item + '</li>'

frag.appendChild(newListItem)// 这里不会刷新DOM

})

$('ul').appendChild(frag)// 添加新元素,此时重载DOM一次

// or do this

var sHtml = ''

$.each(aArray, function(i, item) {

html += '<li>' + item + '</li>'// 构造需要添加元素的字符串

})

$('ul').html(sHtml)// 使用jQuery的$.fn.html()方法添加改字符串

你这样每个循环内添加的都是同一个对象,它就会自动覆盖前一次添加的,所以最终都是添加一个。应该这样:

<script>

var cal = document.getElementById('cal')

for(var i=0i<42i++){

var dateSpan = document.createElement('span')

cal.appendChild(dateSpan)

}

</script>


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/8006676.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-12
下一篇 2023-04-12

发表评论

登录后才能评论

评论列表(0条)

保存