一道百思不解的难题

狄默默斯基 2012-02-07 01:16:54
<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个,,怎么处理的
...全文
147 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
KK3K2005 2012-02-07
  • 打赏
  • 举报
回复
var list=document.getElementById("md").getElementsByTagName("img");
getElementsByTagName返回的只是一个 查询的映射(看起来是一个集合)
该映射 会根据页面dom的更改 动态变化
当你在枚举该集合的时候 修改这个集合的关联的查询位置的dom
则这个集合无限变大

解决方案是
先把 该集合中复制的元素 复制到一个 dom碎片中 最后才添加进 需要的dom中
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 xjl756425616 的回复:]
照理这个var list=document.getElementById("md").getElementsByTagName("img");这个值已经定型了哇,,就算运行for循环,怎么还会动,,说法貌似不大合理
[/Quote]
list没有定型吧,这时的list已经是"img"这个对象了,每次循环的时候都是重新取length的,自己调试下就知道了
狄默默斯基 2012-02-07
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 wtcsy 的回复:]
假如写在里面
var list=document.getElementById("md").getElementsByTagName("img");
for(var n=0;n<list.length;n++)
{
ele=list[n].cloneN……
[/Quote]


照理这个var list=document.getElementById("md").getElementsByTagName("img");这个值已经定型了哇,,就算运行for循环,怎么还会动,,说法貌似不大合理
licip 2012-02-07
  • 打赏
  • 举报
回复
+1[Quote=引用 6 楼 wtcsy 的回复:]
假如写在里面
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);
……
[/Quote]
wtcsy 2012-02-07
  • 打赏
  • 举报
回复

假如写在里面
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的长度是一直变大的
p2227 2012-02-07
  • 打赏
  • 举报
回复
cloneNode 是怎么样的,你这段代码又是想实现什么功能呢?
zabcd117 2012-02-07
  • 打赏
  • 举报
回复
list.length在每次循环的时候都会判断list的长度,如果把append放到for里面,而你每次循环的都是都clone了一个node添加到里面,这个就造成死循环了。放到 for外面的话,ele是一个空字符串,应该会报dom错误之类的异常。
ootwo 2012-02-07
  • 打赏
  • 举报
回复
for(var n=0, nLen = list.length ;n< nLen;n++)
{
ele=list[n].cloneNode(true);
}
未知数 2012-02-07
  • 打赏
  • 举报
回复
这个函数会在页面加载完之前调用,根本获取不到html元素,自己alert一下就知道了
  • 打赏
  • 举报
回复
写在for循环里就变成死循环了吧

87,989

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧