JavaScript 实现表格排序及 DOM 操作详解

作者:微光

时间:2026-10-26

浏览:264

本文通过一个完整的JavaScript示例,演示如何获取表格元素、利用数组sort方法对表格行进行排序,并重新渲染到页面。同时详细解析了table、tbody和tr对象的常用属性与方法,如tBodies、rows、cells及insertRow等,帮助开发者深入理解表格DOM操作。

文章目录

JavaScript 实现表格排序及 DOM 操作详解

本示例旨在通过实际操作掌握表格DOM的核心操作,主要涉及tBodies、rows和cells属性,并结合数组的sort排序方法实现功能。


以下是完整的代码实现:


具体代码如下:

 
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>table排序</title>
</head>
<body>
<table id="tableTest" width="400" border="1">
<tbody>
<tr>
<td>2</td>
<td>bbb</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
<tr>
<td>5</td>
<td>eee</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
<tr>
<td>3</td>
<td>ccc</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
<tr>
<td>4</td>
<td>ddd</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
<tr>
<td>1</td>
<td>aaa</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
</tbody>
</table>
<input type="button" id="sort" value="表格排序" />
<script>
window.onload = function () {
var oTable = document.getElementById('tableTest');
var oTbody = oTable.tBodies[0];
var oBtn = document.getElementById('sort');
var arr = [];//用来存放每一个tr
var isAsc = true;//用来判断升序,还是降序
oBtn.onclick = function () {
for (var i = 0; i < oTbody.rows.length; i++ ) {
arr[i] = oTbody.rows[i];//这里是把每一个tr存放到一个数组,而不是排序的依据(这里是cells[0].innerHTML)
} 
//数组根据cells[0].innerHTML来排序
arr.sort(function (td1, td2){
if(isAsc) {
return parseInt(td1.cells[0].innerHTML) - parseInt(td2.cells[0].innerHTML);
} else {
return parseInt(td2.cells[0].innerHTML) - parseInt(td1.cells[0].innerHTML);
} 
}); 
//把排序后的tr 重新插入tbody
for(var j =0; j < arr.length; j++ ) {
oTbody.appendChild(arr[j]);
} 
//判断升序,降序
isAsc = !isAsc;
} 
} 
</script>
</body>
</html>

Table DOM 操作核心属性与方法

接下来补充一些相关的知识点:


通常操作普通DOM节点时,我们会使用getElementsByTagName或getElementById等方法来获取节点。


在操作table时,这些常规方法同样适用。


然而,直接这样操作往往显得较为繁琐。


因此,针对table元素,我们可以使用一套更专用的属性和方法来操作。


在此之前,先了解一下table的基本结构:


编写table时,许多人可能会直接写出如下结构:


代码如下:

 
<table id="tableTest" width="400" border="1">
<tr>
<td>3</td>
<td>ccc</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
</table>

如果使用Firebug等工具查看生成的代码,会发现多出了一个tbody标签,即便源代码中并未显式编写。


这是为什么呢?


实际上,table的完整结构包含thead、tbody和tfoot,其中tbody可以有多个。


回到主题上来:

JavaScript中关于table元素的常用属性和方法如下:


caption:保存着对<caption>元素(如果有)的指针。


tBodies:是一个<tbody>元素的HTMLCollection集合。


tFoot:保存着对<tfoot>元素(如果有)的指针。


tHead:保存着对<thead>元素(如果有)的指针。


rows:是一个表格中所有行的HTMLCollection集合。


createTHead():创建<thead>元素,将其插入表格中,并返回该元素的引用。


createTFoot():创建<tfoot>元素,将其插入表格中,并返回该元素的引用。


createCaption():创建<caption>元素,将其插入表格中,并返回该元素的引用。


deleteTHead():删除<thead>元素。


deleteTFoot():删除<tfoot>元素。


deleteCaption():删除<caption>元素。


deleteRow(pos):删除指定位置的行。


insertRow(pos):向rows集合中指定位置插入一个行。


有关tbody的属性、方法:

rows:保存着tbody所有行的HTMLCollection集合。


deleteRow(pos):删除指定位置的行。


insertRow(pos):向rows的集合中的指定位置插入一行,并返回对新插入行的引用。


有关tr的属性、方法:

cells:保存着tr所有td(单元格)的HTMLCollection集合。


deleteCell(pos):删除指定位置的单元格。


insetCell(pos):向cells的集合中的指定位置插入一个单元格,并返回对该单元格的引用。


以上内容即为相关主要知识点。

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章