js+dom中的集合复制的非常诡异的问题 htmldomjavascript 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 function mysort() { var tableNode=document.getElementsByTagName("table")[0]; var trNodes=tableNode.rows; var arr=[]; for(var i=0;i<trNodes.length;i++){ arr.push(trNodes[i]); } arr[0]=arr[1]; //为什么这样就复制就不行 alert(arr[1].cells[1].innerHTML) alert(arr[0].cells[1].innerHTML) }不是很明白你的意思 dom的list和数组还是有区别的 dom的list不能修改 就是说domlist[0]=domlist[1]是无效的 你把他放到数组里试试 看是不是你要的效果 思路有点乱不好意思啦首先我提取了var trNodes=tableNode.rows;这个应该看得懂 第一种方式对集合进行复制var arr=trNodes; 然后就会发现 arr[0]=arr[1]; //为什么这样就复制就不行 alert(arr[1].cells[1].innerHTML); alert(arr[0].cells[1].innerHTML); 这样的打印结果是不同的 arr[0].cells[1].innerHTML=arr[1].cells[1].innerHTML; 这样的打印结果是相同的第二种方式对集合进行复制 var arr1=new Array(trNodes.length-1); for(var x=0;x<arr1.length;x++) { arr1[x]=trNodes[x+1]; } 这时arr1[0]=arr1[1];是可以复制过来的也就是说这种复制方法应该与上述第一种复制方法是不相同的我想问的是是什么原因引发的这种差别 还有就是 arr1[1].cells[1].innerHTML=arr1[2].cells[1].innerHTML; alert(arr1[2].cells[1].innerHTML); alert(arr1[1].cells[1].innerHTML); alert(trNodes[2].cells[1].innerHTML); alert(arr[2].cells[1].innerHTML); 当改动了arr1[1].cells[1].innerHTML中的数时原有集合的和第一种复制方式中集合的数值也改变了这是不是可以说明他们在内存中指的是一个地方?如果是那为什么还会引发上面的那个问题? 举个例子吧,arr[0].cells[1]跟arr[1].cells[1]假如都是一个人,IT专业术语叫对象,你永远是你,不是能等于他,顶多去高丽棒子那整容像他,innerHTML就是这个意思,这就是一个人的外表,但是他的DNA永远都是他,它的ID也不能改,最多就是把一个对象的内容给复制过来,换上而已。 那arr1[1].cells[1].innerHTML=arr1[2].cells[1].innerHTML; alert(arr1[2].cells[1].innerHTML); alert(arr1[1].cells[1].innerHTML); alert(trNodes[2].cells[1].innerHTML); alert(arr[2].cells[1].innerHTML); 应该怎么解释呢 arr1[1].cells[1].innerHTML的外表变了为什么会引发arr[2]与trNodes[2]的外表改变呢 父子节点全选反选怎么实现,checbox父子节点联动。。 iframe 子页面如何引用父页面中引用的js和css? jquery load()方法加载页面乱码问题 求JS代码:使得<asp:TextBox>控件的单击事件出现日期选择器呢? 大家来看看这个怎么解决 关于ajax回调函数重复加载问题 这个正则是什么意思 特别是前后两个?号 请大家帮忙如何产生一个xml文件并写成我下面这个格式,谢谢了! 怎样写才能使结果输出为 b 如何将<select></select>放在显示的最底层? 用JavaScript 如何实现打印指定区域 根据内容让滚动条滚到适当位置 js多线程处理办法
{
var tableNode=document.getElementsByTagName("table")[0];
var trNodes=tableNode.rows;
var arr=[];
for(var i=0;i<trNodes.length;i++){
arr.push(trNodes[i]);
}
arr[0]=arr[1]; //为什么这样就复制就不行
alert(arr[1].cells[1].innerHTML)
alert(arr[0].cells[1].innerHTML)
}
不是很明白你的意思 dom的list和数组还是有区别的
dom的list不能修改 就是说domlist[0]=domlist[1]是无效的
你把他放到数组里试试 看是不是你要的效果
首先我提取了var trNodes=tableNode.rows;这个应该看得懂
第一种方式对集合进行复制var arr=trNodes;
然后就会发现
arr[0]=arr[1]; //为什么这样就复制就不行
alert(arr[1].cells[1].innerHTML);
alert(arr[0].cells[1].innerHTML);
这样的打印结果是不同的
arr[0].cells[1].innerHTML=arr[1].cells[1].innerHTML;
这样的打印结果是相同的
第二种方式对集合进行复制
var arr1=new Array(trNodes.length-1);
for(var x=0;x<arr1.length;x++)
{
arr1[x]=trNodes[x+1];
}
这时arr1[0]=arr1[1];是可以复制过来的
也就是说这种复制方法应该与上述第一种复制方法是不相同的
我想问的是是什么原因引发的这种差别
还有就是
arr1[1].cells[1].innerHTML=arr1[2].cells[1].innerHTML;
alert(arr1[2].cells[1].innerHTML);
alert(arr1[1].cells[1].innerHTML);
alert(trNodes[2].cells[1].innerHTML);
alert(arr[2].cells[1].innerHTML);
当改动了arr1[1].cells[1].innerHTML中的数时原有集合的和第一种复制方式中集合的数值也改变了
这是不是可以说明他们在内存中指的是一个地方?如果是那为什么还会引发上面的那个问题?
举个例子吧,arr[0].cells[1]跟arr[1].cells[1]假如都是一个人,IT专业术语叫对象,
你永远是你,不是能等于他,顶多去高丽棒子那整容像他,innerHTML就是这个意思,这就是一个人的外表,
但是他的DNA永远都是他,它的ID也不能改,最多就是把一个对象的内容给复制过来,换上而已。
alert(arr1[2].cells[1].innerHTML);
alert(arr1[1].cells[1].innerHTML);
alert(trNodes[2].cells[1].innerHTML);
alert(arr[2].cells[1].innerHTML);
应该怎么解释呢 arr1[1].cells[1].innerHTML的外表变了
为什么会引发arr[2]与trNodes[2]的外表改变呢