首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > JavaScript >

一道百思不解的难题,该如何处理

2012-03-24 
一道百思不解的难题JScript codescriptvar movepic{topmove:function(){var listdocument.getElementB

一道百思不解的难题

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");
for(var n=0;n<list.length;n++)
{
ele=list[n].cloneNode(true);
document.getElementById("md").appendChild(ele);
……

[解决办法]
探讨
照理这个var list=document.getElementById("md").getElementsByTagName("img");这个值已经定型了哇,,就算运行for循环,怎么还会动,,说法貌似不大合理

[解决办法]
var list=document.getElementById("md").getElementsByTagName("img");
getElementsByTagName返回的只是一个 查询的映射(看起来是一个集合)
该映射 会根据页面dom的更改 动态变化
当你在枚举该集合的时候 修改这个集合的关联的查询位置的dom
则这个集合无限变大

解决方案是
先把 该集合中复制的元素 复制到一个 dom碎片中 最后才添加进 需要的dom中

热点排行