| 文章簡介:Javascript執行個體教程:DOM方法建立和修改表格. |
<table>元素是HTML中最複雜的結構之一。要想建立表格,一般都必須涉及表示表格行、儲存格、表頭等方面的標籤。由於涉及的標籤多,因而使用核心DOM方法建立和修改表格往往都免不了要編寫大量的代碼。假設我們要使用DOM來建立下面的HTML表格:
<table border="1" width="100%"> <tbody> <tr> <td>Cell 1,1</td> <td>Cell 2,1</td> </tr> <tr> <td>Cell 1,2</td> <td>Cell 2,2</td> </tr> </tbody></table>
要是用核心DOM方法建立這些元素,得需要像下面這麼多的代碼:
//建立tablevar table = document.createElement("table");table.border = 1;table.width = "100%";//建立tbodyvar tbody = document.createElement("tbody");table.appendChild(tbody);//建立第一行var row1 = document.createElement("tr");tbody.appendChild(row1);var cell1_1 = document.createElement("td");cell1_1.appendChild(document.createTextNode("Cell 1,1"));row1.appendChild(cell1_1);var cell2_1 = document.createElement("td");cell2_1.appendChild(document.createTextNode("Cell 2,1"));row1.appendChild(cell2_1);//建立第二行var row2 = document.createElement("tr");tbody.appendChild(row2);var cell1_2 = document.createElement("td");cell1_2.appendChild(document.createTextNode("Cell 1,2"));row2.appendChild(cell1_2);var cell2_2 = document.createElement("td");cell2_2.appendChild(document.createTextNode("Cell 2,2"));row2.appendChild(cell2_2);//將表格插入到文檔主題中document.body.appendChild(table);
顯然,DOM代碼很長,還有點不太好懂。為了方便構建表格,HTML DOM 還為<table>、<tbody>和<tr>元素添加了一些屬性和方法。
為<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>元素中儲存格的HTMLCollection;
- deleteCell(pos):刪除指定位置的儲存格;
- insertCell(pos):向cells集合中的指定位置插入一個儲存格,返回新插入儲存格的引用。
使用這些屬性和方法,可以極大的減少建立報個所需要的代碼數量。例如,使用這些屬性和方法可以將前面的代碼重寫如下:
//建立tablevar table = document.createElement("table");table.border = 1;table.width = "100%";//建立tbodyvar tbody = document.createElement("tbody");table.appendChild(tbody);tbody.insertRow(0);tbody.rows[0].insertCell(0);tbody.rows[0].cells[0].appendChild(document.createTextNode("Cell 1,1"));tbody.rows[0].insertCell(1);tbody.rows[0].cells[1].appendChild(document.createTextNode("Cell 2,1"));//建立第一行tbody.insertRow(1);tbody.rows[1].insertCell(0);tbody.rows[1].cells[0].appendChild(document.createTextNode("Cell 1,2"));tbody.rows[1].insertCell(1);tbody.rows[1].cells[1].appendChild(document.createTextNode("Cell 2,2"));//將表格添加到文檔主題中document.body.appendChild(table);
在這次代碼中,建立<table>和<tbody>的代碼沒有變化。不同是建立兩行的部分,其中使用了HTML DOM定義的表格屬性和方法。在建立第一行時,通過<tbody>元素調用了insertRow()方法,傳入了參數0——表示應該插入的行放在什麼位置上。執行這一樣的代碼後,就會自動建立一行並將其插入到<tbody>元素的位置0上。因此馬上就可以通過tbody.rows[0]來引用新插入的行。
建立儲存格的方式也十分相似,即通過<tr>元素調用insertCell()方法並傳入放置儲存格的位置。然後,就可以通過tbody.rows[0].cells[0]來引用新插入的儲存格,因為新建立的儲存格被插入到了這一行的位置0上。