在這個列子中,練習了table的操作,主要有: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> </td> <td> </td> </tr> <tr> <td>5</td> <td>eee</td> <td> </td> <td> </td> </tr> <tr> <td>3</td> <td>ccc</td> <td> </td> <td> </td> </tr> <tr> <td>4</td> <td>ddd</td> <td> </td> <td> </td> </tr> <tr> <td>1</td> <td>aaa</td> <td> </td> <td> </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>
下面啰嗦一些相關的知識點:
我們都知道,平時操作一般的DOM可以getElementsByTagName、getElementById雲雲來獲取相關節點
在table中當然這種方法也可以實現
顯然,這樣操作會很麻煩
所以,對於table我們可以用另一套方法、屬性來操作:
在這之前,先說一些有關table的東東:
平時寫table相信很多人會直接這么寫:
<table id="tableTest" width="400" border="1"> <tr> <td>3</td> <td>ccc</td> <td> </td> <td> </td> </tr> </table>
如果,你firebug查看一下代碼,你會發現會多出一個tbody來,明明源代碼是沒有的
這是為毛?!
其實,table的真正結構是: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的集合中的指定位置插入一個單元格,並返回對該單元格的引用
OK,就說這些………………
