一道百思不解的难题
JScript code
<script>
var movepic={
topmove:function(){
var list=document.getElementById("md").getElementsByTagName("img");
var ele='';
for(var n=0;n<list.length;n++)
{
ele=list[n].cloneNode(true);
}
document.getElementById("md").appendChild(ele);
}
}
movepic.topmove();
</script>
document.getElementById("md").appendChild(ele);写在for循环里,浏览器崩溃了,,写在外面可以但只有1个,,怎么处理的
------解决方案--------------------写在for循环里就变成死循环了吧
------解决方案--------------------这个函数会在页面加载完之前调用,根本获取不到html元素,自己alert一下就知道了
------解决方案--------------------for(var n=0, nLen = list.length ;n< nLen;n++)
{
ele=list[n].cloneNode(true);
}
------解决方案--------------------list.length在每次循环的时候都会判断list的长度,如果把append放到for里面,而你每次循环的都是都clone了一个node添加到里面,这个就造成死循环了。放到 for外面的话,ele是一个空字符串,应该会报dom错误之类的异常。
------解决方案--------------------cloneNode 是怎么样的,你这段代码又是想实现什么功能呢?
------解决方案-------------------- 假如写在里面
var list=document.getElementById("md").getElementsByTagName("img");
for(var n=0;n<list.length;n++)
{
ele=list[n].cloneNode(true);
document.getElementById("md").appendChild(ele);
}
你不觉得list的长度是一直变大的
------解决方案--------------------+1
------解决方案--------------------
------解决方案-------------------- var list=document.getElementById("md").getElementsByTagName("img");
getElementsByTagName返回的只是一个 查询的映射(看起来是一个集合)
该映射 会根据页面dom的更改 动态变化
当你在枚举该集合的时候 修改这个集合的关联的查询位置的dom
则这个集合无限变大
解决方案是
先把 该集合中复制的元素 复制到一个 dom碎片中 最后才添加进 需要的dom中