- 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中