博客园  :: 首页  :: 管理
element.appendChild(newNode) 方法中,如果 newNode本身是Dom中的一个节点. 那么appendChild方法执行的不再
是append操作了,而是一个move操作. 比如说:

<html>
<script>
function f(){
document.body.appendChild(document.getElementById(
"btn1"))
}

</script>
<body onload=f()>
<input type=button id=btn1 value="button 1">
<input type=button id=btn2 value="button 2">
<input type=button id=btn3 value="button 3">
<input type=button id=btn4 value="button 4">
</body>
</html>

因为btn1本身是dom 中的一个节点,所以 appendChild操作会将 btn1 移动到 btn4的后面,而不是复制.

利用这个特点,我们可以用极少量的代码实现另类的文字无缝滚动.

代码如下:

appendChild实现的无缝滚动

呵呵,是不是很简洁呢,  这个方法我在今年五月份的时候发到了CSDN上,当时引起了许许多多的JavaScript爱好
者的大讨论, 那帖子被CSDN首页置顶,三百人参与回复讨论.  

原贴地址:  最简单的无缝滚动程序,只需要五行代码

 

除了这个应用, appendChild的这个特性还可以在表格排序上大展身手.

注意,下面表格排序代码只是为了说明 appendChild的用法,没有在 ff中测试.

页面加载后,表格根据第一列数字由小到大进行排序<br>

<table border id="tbl" width="40%">
<tr><td>12</td><td>1</td></tr>
<tr><td>9</td><td>2</td></tr>
<tr><td>15</td><td>3</td></tr>
<tr><td>18</td><td>4</td></tr>
<tr><td>1</td><td>5</td></tr>
</table>

<script>

// by Go_Rush(阿舜)  from http://ashun.cnblogs.com/

function $A(arrayLike){
     
for(var i=0,ret=[];i<arrayLike.length;i++) ret.push(arrayLike[i]);
     
return ret
}

Array.prototype.each
=function(f){for(var i=0;i<this.length;i++) f(this[i],i,this)}

window.onload
=function(){
     $A(document.getElementById(
"tbl").rows).sort(function(tr1,tr2){
    
return Number(tr1.cells[0].innerHTML)>Number(tr2.cells[0].innerHTML)?1:-1
      }).each(
function(tr){
    document.getElementById(
"tbl").firstChild.appendChild(tr)
     })    
}
</script>

怎么样,有了appendChild 的大力相助,这个排序够简单吧.

关于表格的更多操作方法,和高级的自定义表格排序,请参见我在CSDN的另一个帖子(也是用appendChild实现的排序,且兼容firefox)

http://community.csdn.net/expert/Topicview2.asp?id=5174915