appendChild相关问题

java小愤青 发布于 2012/07/12 17:50
阅读 452
收藏 0
<script>
    function moveNote(){
        var tr = document.getElementById("2");
        var table1 = document.getElementById("1");
        table1.appendChild(tr);
    }
</script>
<table id="1">
    <tr>
        <td>1</td>
    </tr>
<table>


<table bgcolor="red">
    <tr id="2" onclick="moveNote()">
        <td>1</td>
    </tr>

<table>

 

 

当点击红色tr的时候,第一个table会被appendChild这个tr,但奇怪的是,为什么红色tr自动便没有了,是因为被插入的tr和红色tr是同一个对象吗,有点怪怪的, 哪位高手解释下,点击后内存中具体是如何处理的

是不是就像java一样,tr对象的指向(地址)直接被appendChild改变了,所以第二个table中自然而然就没有了,相当于tr指向改变了,这么理解有问题吗

加载中
0
JustForFly
JustForFly

这样写就可以了。

function moveNote(){ 

        var tr = document.getElementById("2"); 

var tr_temp = tr.cloneNode(true);

        var table1 = document.getElementById("1"); 

        table1.appendChild(tr_temp); 

    } 

至于你提的问题,可以参考:

http://www.w3school.com.cn/xmldom/met_node_appendchild.asp

以下是引用:

appendChild(newchild)方法将把节点 newchild 添加到文档中,使它成为当前节点的最后一个子节点。

如果文档树中已经存在了 newchild,它将从文档树中删除,然后重新插入它的新位置。如果 newchild 是 DocumentFragment 节点,则不会直接插入它,而是把它的子节点按序插入当前节点的 childNodes[] 数组的末尾。


0
Andre.Z
Andre.Z

tr的指向没变,还是那个,只不过你把这个节点挪到了table1下。正如你前面理解的,插入的tr就是红色的tr。而你后面的理解,是错误的。指向改变,并不会影响原来的对象。

java小愤青
java小愤青
谢谢指教
0
java小愤青
java小愤青

引用来自“JustForFly”的答案

这样写就可以了。

function moveNote(){ 

        var tr = document.getElementById("2"); 

var tr_temp = tr.cloneNode(true);

        var table1 = document.getElementById("1"); 

        table1.appendChild(tr_temp); 

    } 

至于你提的问题,可以参考:

http://www.w3school.com.cn/xmldom/met_node_appendchild.asp

以下是引用:

appendChild(newchild)方法将把节点 newchild 添加到文档中,使它成为当前节点的最后一个子节点。

如果文档树中已经存在了 newchild,它将从文档树中删除,然后重新插入它的新位置。如果 newchild 是 DocumentFragment 节点,则不会直接插入它,而是把它的子节点按序插入当前节点的 childNodes[] 数组的末尾。


谢谢哈
返回顶部
顶部