<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方法創建這些元素,得需要像下面這麼多的代碼:
//創建table var table = document.createElement("table"); table.border = 1; table.width = "100%"; //創建tbody var 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>元素添加的屬性和方法如下:
為<tbody>元素添加屬性和方法有:
為<tr>元素添加的屬性和方法如下:
使用這些屬性和方法,可以極大的減少創建報個所需要的代碼數量。例如,使用這些屬性和方法可以將前面的代碼重寫如下:
//創建table var table = document.createElement("table"); table.border = 1; table.width = "100%"; //創建tbody var 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上。