表格的层次结构
<table border="1"> <caption>表格标题</caption> <thead> <tr> <th>表头1</th> <th>表头2</th> <th>表头3</th> </tr> </thead> <tfoot> <tr> <td colspan="3">脚注</td> </tr> </tfoot> <tbody> <tr> <td>数据</td> <td>数据</td> <td>数据</td> </tr> </tbody> <tbody> <tr> <td>数据</td> <td>数据</td> <td>数据</td> </tr> </tbody> </table>
上面是一个创建表格所用到的所有标签,但一些标签是可写可不写的,事实上一般的表格只需写上tr与td标签就行了,而标题caption,表头thead表尾tbody等则是一些语义性元素
var table= document.getElementById("myTable"); //获取表格标题caption标签 var caption = table.getElementsByTagName("caption")[0]; //HTML DOM提供的更简单的方法 caption= table.caption;//返回表格标题caption标签,如果没有则返回null if (caption) { alert(caption.firstChild.nodeValue);//输出标题文本 } var thead =table.tHead;//获取表头 var tfoot = table.tFoot;//获取表尾
由于caption,thead,tfoot这些标签一个表格中只能出现一次,所以HTML DOM提供了直接的属性来访问,而对于tr,td,th,tbody这些重复的标签,HTML DOM则给Table对象增加了一些集合来访问
//获取所有tr var rows = table.getElementsByTagName("tr");//但会获取嵌套表格中的tr //rows集合只会包含表格的行,而不包含表格下面嵌套表格的行 rows = table.rows;//返回包含表格中所有行的一个数组 alert(rows[0].innerHTML); var tBodies = table.tBodies;//返回包含表格中所有tbody的一个数组 var cells =table.cells;//返回包含表格中所有单元格的一个数组注意,对于Table对象的cells属性,它将返回所有td,th标签,而对于tBodies属性,即使HTML 源代码中没有tbody标签,也会默认有一个tbody
创建标题:createCaption() 方法用于在表格中获取或创建 元素。返回一个 HTMLElement 对象,表示该表的 元素。如果该表格已经有了标题,则返回它。如果该表没有 元素,则创建一个新的空 元素,把它插入表格,并返回它。
var caption = document.createElement("caption"); caption.appendChild(document.createTextNode("新标题")); table.insertBefore(caption,table.firstChild); /* 上面方法有两大缺点: 1.方法复杂 2.如果已经存在caption标签,则会造成caption标签重复,导致后插入的无效 */ caption = table.createCaption();//注意,并不需要指定要将其插入到哪个表格中 //因为该方法必须在对应的表格对象上调用 caption.innerHTML = "新标题";
与createCaption相似的还有:
既然有增加的方法,就有对应的删除的方法
添加与删除行
行对象的一些属性:cells属性返回行中所有单元格的一个数组。rowIndex属性返回该行在表中的位置。sectionRowIndex属性返回在 tBody 、tHead 或 tFoot 中,行的位置。
var row = table.rows[0]; alert(row.cells.length);//第一行中单元格的数目 alert(row.rowIndex);//0
TableRow 对象的方法
var row =table.rows[2]; var cell = row.insertCell(2); cell.innerHTML = "新插入的单元格"; //上面的代码与下面的等效(但不考虑空白文本节点) var cell = document.createElement("td"); cell.innerHTML = "新插入的单元格"; row.insertBefore(cell,row.childNodes[2]); //删除单元格 row.deleteCell(2); //等效代码(同样不考虑空白文本节点) row.removeChild(row.childNodes[2]);
与TableCell对象相关的有用的属性只有一个:cellIndex属性返回单元在格行中的下标
alert(table.rows[2].cells[3].cellIndex);//3