由 element.appendChild(newNode) ,谈开去, 分享几个并不常见的Dom操作技巧给大家
Posted on 2006-11-30 03:42 Go_Rush 阅读(7243) 评论(37) 编辑 收藏 举报
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>
appendChild实现的无缝滚动
是append操作了,而是一个move操作. 比如说:













因为btn1本身是dom 中的一个节点,所以 appendChild操作会将 btn1 移动到 btn4的后面,而不是复制.
利用这个特点,我们可以用极少量的代码实现另类的文字无缝滚动.
代码如下:

呵呵,是不是很简洁呢, 这个方法我在今年五月份的时候发到了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>
<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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix