JavaScript,DOM操做表格html
學習要點:node
1.操做表格瀏覽器
DOM在操做生成HTML上,仍是比較簡明的。不過,因爲瀏覽器老是存在兼容和陷阱,致使最終的操做就不是那麼簡單方便了。本章主要了解一下DOM操做表格和樣式的一些知識。app
一.操做表格函數
<table>標籤是HTML中結構最爲複雜的一個,咱們能夠經過DOM來建立生成它,或者HTML DOM來操做它。(PS:HTML DOM提供了更加方便快捷的方式來操做HTML,有手冊)。學習
使用DOM來建立個表格,很繁瑣【不推薦】spa
window.onload = function() { //window.onload事件,等待html執行完成後,執行匿名函數 //使用DOM來建立這個表格 var table = document.createElement('table'); //建立table元素節點 table.border = 1; //設置table元素節點邊框寬度 table.width = 300; //設置table元素節點寬度 var caption = document.createElement('caption'); //建立表格標題caption元素節點 table.appendChild(caption); //將標題caption元素節點,添加到table元素節點的子節點末尾 caption.appendChild(document.createTextNode('人員表')); //建立一個文本將它添加到標題caption元素節點裏 var thead = document.createElement('thead'); table.appendChild(thead); var tr = document.createElement('tr'); thead.appendChild(tr); var th1 = document.createElement('th'); var th2 = document.createElement('th'); var th3 = document.createElement('th'); tr.appendChild(th1); th1.appendChild(document.createTextNode('姓名')); tr.appendChild(th2); th2.appendChild(document.createTextNode('年齡')); document.body.appendChild(table); };
PS:使用DOM來建立表格其實已經沒有什麼難度,就是有點兒小煩而已。下面咱們再使用HTML DOM來獲取和建立這個相同的表格。code
HTML DOM建立或者獲取表格更清晰方便,比DOM好的多htm
HTML DOM中,給這些元素標籤提供了一些屬性和方法blog
屬性或方法 |
說明 |
caption |
保存着<caption>元素的引用 |
tBodies |
保存着<tbody>元素的HTMLCollection集合 |
tFoot |
保存着對<tfoot>元素的引用 |
tHead |
保存着對<thead>元素的引用 |
rows |
保存着對<tr> 元素的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集合的指定位置插入一個單元格,並返回引用 |
PS:由於表格較爲繁雜,層次也多,在使用以前所學習的DOM只是來獲取某個元素會很是難受,因此使用HTML DOM會清晰不少
HTML DOM獲取表格
首先要經過id或者名稱,獲取到table節點
caption屬性,獲取或設置表格的<caption>標題標籤
使用方式:
table節點.caption
/* <table border="1" width="300"> <caption>人員表</caption> <thead> <tr> <th>姓名</th> <th>性別</th> <th>年齡</th> </tr> </thead> <tbody> <tr> <td>張三</td> <td>男</td> <td>20</td> </tr> <tr> <td>李四</td> <td>女</td> <td>22</td> </tr> </tbody> <tfoot> <tr> <td colspan="3">合計:N</td> </tr> </tfoot> </table> */ window.onload = function() { //window.onload事件,等待html執行完成後,執行匿名函數 var table = document.getElementsByTagName('table')[0]; //經過名稱獲取到table標籤節點 alert(table.caption); //caption屬性,獲取表格的caption標題標籤節點 //返回:[object HTMLTableCaptionElement] alert(table.caption.innerHTML); //查看標題節點裏的文本內容 //返回:人員表 table.caption.innerHTML = '標題修改了'; alert(table.caption.innerHTML); //查看標題節點裏的文本內容 //返回:標題修改了 };
tHead屬性,獲取表格的<thead>表頭標籤節點
使用方式:
table節點.tHead
/* <table border="1" width="300"> <caption>人員表</caption> <thead> <tr> <th>姓名</th> <th>性別</th> <th>年齡</th> </tr> </thead> <tbody> <tr> <td>張三</td> <td>男</td> <td>20</td> </tr> <tr> <td>李四</td> <td>女</td> <td>22</td> </tr> </tbody> <tfoot> <tr> <td colspan="3">合計:N</td> </tr> </tfoot> </table> */ window.onload = function() { //window.onload事件,等待html執行完成後,執行匿名函數 var table = document.getElementsByTagName('table')[0]; //經過名稱獲取到table標籤節點 alert(table.tHead); //tHead屬性,獲取表格的<thead>表頭標籤節點 //返回:[object HTMLTableSectionElement] };
tFoot屬性,獲取表格的<tfoot>表尾標籤節點
使用方式:
table節點.tFoot
/* <table border="1" width="300"> <caption>人員表</caption> <thead> <tr> <th>姓名</th> <th>性別</th> <th>年齡</th> </tr> </thead> <tbody> <tr> <td>張三</td> <td>男</td> <td>20</td> </tr> <tr> <td>李四</td> <td>女</td> <td>22</td> </tr> </tbody> <tfoot> <tr> <td colspan="3">合計:N</td> </tr> </tfoot> </table> */ window.onload = function() { //window.onload事件,等待html執行完成後,執行匿名函數 var table = document.getElementsByTagName('table')[0]; //經過名稱獲取到table標籤節點 alert(table.tFoot); //tFoot屬性,獲取表格的<tfoot>表尾標籤節點 //返回:[object HTMLTableSectionElement] };
tBodies屬性,獲取表格的<tbody>表主體標籤節點,由於主體能夠有多個,因此tBodies屬性返回的集合
使用方式:
table節點.tBodies
/* <table border="1" width="300"> <caption>人員表</caption> <thead> <tr> <th>姓名</th> <th>性別</th> <th>年齡</th> </tr> </thead> <tbody> <tr> <td>張三</td> <td>男</td> <td>20</td> </tr> <tr> <td>李四</td> <td>女</td> <td>22</td> </tr> </tbody> <tfoot> <tr> <td colspan="3">合計:N</td> </tr> </tfoot> </table> */ window.onload = function() { //window.onload事件,等待html執行完成後,執行匿名函數 var table = document.getElementsByTagName('table')[0]; //經過名稱獲取到table標籤節點 alert(table.tBodies); //tBodies屬性,獲取表格的<tbody>表主體標籤節點,由於主體能夠有多個,因此tBodies屬性返回的集合 //返回:[object HTMLCollection] alert(table.tBodies[0]); //獲取第一個<tbody>標籤 //返回:[object HTMLTableSectionElement] };
PS:在一個表格中<thead>和<tfoot>是惟一的,只能有一個。而<tbody>不是惟一的能夠有多個,這樣致使最後返回的<thead>和<tfoot>是元素引用,而<tbody>返回的是元素集合。
rows屬性,獲取表格的行籤節點,由於行能夠有多個,因此rows屬性返回的集合
使用方式:
table節點.rows
/* <table border="1" width="300"> <caption>人員表</caption> <thead> <tr> <th>姓名</th> <th>性別</th> <th>年齡</th> </tr> </thead> <tbody> <tr> <td>張三</td> <td>男</td> <td>20</td> </tr> <tr> <td>李四</td> <td>女</td> <td>22</td> </tr> </tbody> <tfoot> <tr> <td colspan="3">合計:N</td> </tr> </tfoot> </table> */ window.onload = function() { //window.onload事件,等待html執行完成後,執行匿名函數 var table = document.getElementsByTagName('table')[0]; //經過名稱獲取到table標籤節點 alert(table.rows); //rows屬性,獲取表格的<tr>主體裏的行籤節點,由於行能夠有多個,因此rows屬性返回的集合 //返回:[object HTMLCollection] alert(table.rows.length); //獲取<tr>標籤長度 //返回:4 };
獲取表格主體<tbody>的<tr>裏的行籤節點
/* <table border="1" width="300"> <caption>人員表</caption> <thead> <tr> <th>姓名</th> <th>性別</th> <th>年齡</th> </tr> </thead> <tbody> <tr> <td>張三</td> <td>男</td> <td>20</td> </tr> <tr> <td>李四</td> <td>女</td> <td>22</td> </tr> </tbody> <tfoot> <tr> <td colspan="3">合計:N</td> </tr> </tfoot> </table> */ window.onload = function() { //window.onload事件,等待html執行完成後,執行匿名函數 var table = document.getElementsByTagName('table')[0]; //經過名稱獲取到table標籤節點 alert(table.tBodies[0].rows); //獲取表格主體第一個<tbody>的<tr>裏的行籤節點 //返回:[object HTMLCollection] alert(table.tBodies[0].rows.length); //獲取<tr>標籤長度 //返回:2 };
cells屬性,獲取表格的<tr>裏的<td>單元格節點,cells屬性返回的集合
使用方式:
rows[0]行節點.cells
/* <table border="1" width="300"> <caption>人員表</caption> <thead> <tr> <th>姓名</th> <th>性別</th> <th>年齡</th> </tr> </thead> <tbody> <tr> <td>張三</td> <td>男</td> <td>20</td> </tr> <tr> <td>李四</td> <td>女</td> <td>22</td> </tr> </tbody> <tfoot> <tr> <td colspan="3">合計:N</td> </tr> </tfoot> </table> */ window.onload = function() { //window.onload事件,等待html執行完成後,執行匿名函數 var table = document.getElementsByTagName('table')[0]; //經過名稱獲取到table標籤節點 alert(table.tBodies[0].rows[0]); //獲取第一個表格主體裏的第一個<tr>標籤 //返回:[object HTMLCollection] //cells屬性,獲取表格的<tr>裏的<td>單元格節點,cells屬性返回的集合 alert(table.tBodies[0].rows[0].cells); //獲取第一個表格主體<tbody>裏的第一個<tr>標籤裏的單元格<td> //返回;[object HTMLCollection] alert(table.tBodies[0].rows[0].cells.length); //查看單元格<td>的長度 //返回;3 };
獲取<td>單元格里的文本內容
/* <table border="1" width="300"> <caption>人員表</caption> <thead> <tr> <th>姓名</th> <th>性別</th> <th>年齡</th> </tr> </thead> <tbody> <tr> <td>張三</td> <td>男</td> <td>20</td> </tr> <tr> <td>李四</td> <td>女</td> <td>22</td> </tr> </tbody> <tfoot> <tr> <td colspan="3">合計:N</td> </tr> </tfoot> </table> */ window.onload = function() { //window.onload事件,等待html執行完成後,執行匿名函數 var table = document.getElementsByTagName('table')[0]; //經過名稱獲取到table標籤節點 alert(table.tBodies[0].rows[0]); //獲取第一個表格主體裏的第一個<tr>標籤 //返回:[object HTMLCollection] //cells屬性,獲取表格的<tr>裏的<td>單元格節點,cells屬性返回的集合 alert(table.tBodies[0].rows[0].cells); //獲取第一個表格主體<tbody>裏的第一個<tr>標籤裏的單元格<td> //返回;[object HTMLCollection] alert(table.tBodies[0].rows[0].cells[0].innerHTML); //查看第一個單元格<td>的文本內容 //返回;張三 };
按HTML DOM來刪除標題、表頭、表尾、行、單元格
deleteCaption()方法,刪除表格的標題<caption>節點
使用方式:
table節點.deleteCaption()
/* <table border="1" width="300"> <caption>人員表</caption> <thead> <tr> <th>姓名</th> <th>性別</th> <th>年齡</th> </tr> </thead> <tbody> <tr> <td>張三</td> <td>男</td> <td>20</td> </tr> <tr> <td>李四</td> <td>女</td> <td>22</td> </tr> </tbody> <tfoot> <tr> <td colspan="3">合計:N</td> </tr> </tfoot> </table> */ window.onload = function() { //window.onload事件,等待html執行完成後,執行匿名函數 var table = document.getElementsByTagName('table')[0]; //經過名稱獲取到table標籤節點 table.deleteCaption(); //deleteCaption()方法,刪除表格的標題<caption>節點 };
deleteTHead()方法,刪除表格的表頭<thead>節點
使用方式:
table節點.deleteTHead()
/* <table border="1" width="300"> <caption>人員表</caption> <thead> <tr> <th>姓名</th> <th>性別</th> <th>年齡</th> </tr> </thead> <tbody> <tr> <td>張三</td> <td>男</td> <td>20</td> </tr> <tr> <td>李四</td> <td>女</td> <td>22</td> </tr> </tbody> <tfoot> <tr> <td colspan="3">合計:N</td> </tr> </tfoot> </table> */ window.onload = function() { //window.onload事件,等待html執行完成後,執行匿名函數 var table = document.getElementsByTagName('table')[0]; //經過名稱獲取到table標籤節點 table.deleteTHead(); //deleteTHead()方法,刪除表格的表頭<thead>節點 };
deleteTFoot()方法,刪除表格的表尾<tfoot>節點
使用方式:
table節點.deleteTFoot()
/* <table border="1" width="300"> <caption>人員表</caption> <thead> <tr> <th>姓名</th> <th>性別</th> <th>年齡</th> </tr> </thead> <tbody> <tr> <td>張三</td> <td>男</td> <td>20</td> </tr> <tr> <td>李四</td> <td>女</td> <td>22</td> </tr> </tbody> <tfoot> <tr> <td colspan="3">合計:N</td> </tr> </tfoot> </table> */ window.onload = function() { //window.onload事件,等待html執行完成後,執行匿名函數 var table = document.getElementsByTagName('table')[0]; //經過名稱獲取到table標籤節點 table.deleteTFoot(); //deleteTFoot()方法,刪除表格的表尾<tfoot>節點 };
deleteRow()方法,刪除表格的行<tr>節點,參數是要刪除第幾個tr標籤
使用方式:
tr父節點.deleteRow(要刪除第幾個tr)
/* <table border="1" width="300"> <caption>人員表</caption> <thead> <tr> <th>姓名</th> <th>性別</th> <th>年齡</th> </tr> </thead> <tbody> <tr> <td>張三</td> <td>男</td> <td>20</td> </tr> <tr> <td>李四</td> <td>女</td> <td>22</td> </tr> </tbody> <tfoot> <tr> <td colspan="3">合計:N</td> </tr> </tfoot> </table> */ window.onload = function() { //window.onload事件,等待html執行完成後,執行匿名函數 var table = document.getElementsByTagName('table')[0]; //經過名稱獲取到table標籤節點 table.tBodies[0].deleteRow(0); //deleteRow()方法,刪除表格的行<tr>節點 };
deleteCell()方法,刪除表格的單元格<td>節點,參數是要刪除第幾個td標籤
使用方式:
td父節點.deleteCell(要刪除第幾個td標籤)
/* <table border="1" width="300"> <caption>人員表</caption> <thead> <tr> <th>姓名</th> <th>性別</th> <th>年齡</th> </tr> </thead> <tbody> <tr> <td>張三</td> <td>男</td> <td>20</td> </tr> <tr> <td>李四</td> <td>女</td> <td>22</td> </tr> </tbody> <tfoot> <tr> <td colspan="3">合計:N</td> </tr> </tfoot> </table> */ window.onload = function() { //window.onload事件,等待html執行完成後,執行匿名函數 var table = document.getElementsByTagName('table')[0]; //經過名稱獲取到table標籤節點 table.tBodies[0].rows[1].deleteCell(1); //deleteCell()方法,刪除表格的單元格<td>節點,參數是要刪除第幾個td標籤 };
添加表格
給<body>添加<table>標籤
window.onload = function() { //window.onload事件,等待html執行完成後,執行匿名函數 var table = document.createElement('table'); //建立一個元素table標籤節點 table.width = 300; //設置table標籤寬度 table.border = 1; //table標籤邊框寬度 document.body.appendChild(table); //將table標籤添加到body的子節點裏 };
createCaption()方法,給表格<table>,添加標題標籤<caption>
使用方式:
<caption>父節點.createCaption()
window.onload = function() { //window.onload事件,等待html執行完成後,執行匿名函數 var table = document.createElement('table'); //建立一個元素table標籤節點 table.width = 300; //設置table標籤寬度 table.border = 1; //table標籤邊框寬度 table.createCaption().innerHTML = '人員表'; //createCaption()方法,給表格<table>,添加標題標籤<caption> document.body.appendChild(table); //將table標籤添加到body的子節點裏 };
createTHead()方法,給表格<table>,添加表頭標籤<thead>,返回引用
使用方式:
<thead>父節點.createTHead()
window.onload = function() { //window.onload事件,等待html執行完成後,執行匿名函數 var table = document.createElement('table'); //建立一個元素table標籤節點 table.width = 300; //設置table標籤寬度 table.border = 1; //table標籤邊框寬度 document.body.appendChild(table); //將table標籤添加到body的子節點裏 table.createCaption().innerHTML = '人員表'; //createCaption()方法,給表格<table>,添加標題標籤<caption> var thead = table.createTHead(); //createTHead()方法,給表格<table>,添加表頭標籤<thead> };
insertRow()方法,給表格添加行標籤<tr>,參數添加第幾行,返回引用
使用方式:
<tr>父節點.insertRow()
window.onload = function() { //window.onload事件,等待html執行完成後,執行匿名函數 var table = document.createElement('table'); //建立一個元素table標籤節點 table.width = 300; //設置table標籤寬度 table.border = 1; //table標籤邊框寬度 document.body.appendChild(table); //將table標籤添加到body的子節點裏 table.createCaption().innerHTML = '人員表'; //createCaption()方法,給表格<table>,添加標題標籤<caption> var thead = table.createTHead(); //createTHead()方法,給表格<table>,添加表頭標籤<thead> thead.insertRow(0); //insertRow()方法,給表格添加行標籤<tr> };
insertCell()方法,給表格添加單元格標籤<td>,參數建立第幾個td
使用方式:
<td>父節點.insertCell()
window.onload = function() { //window.onload事件,等待html執行完成後,執行匿名函數 var table = document.createElement('table'); //建立一個元素table標籤節點 table.width = 300; //設置table標籤寬度 table.border = 1; //table標籤邊框寬度 document.body.appendChild(table); //將table標籤添加到body的子節點裏 table.createCaption().innerHTML = '人員表'; //createCaption()方法,給表格<table>,添加標題標籤<caption> var thead = table.createTHead(); //createTHead()方法,給表格<table>,添加表頭標籤<thead> var tr = thead.insertRow(0); //insertRow()方法,給表格添加行標籤<tr> tr.insertCell(0).innerHTML = '數據1'; //insertCell()方法,給表格添加單元格標籤<td>,參數建立第幾個td tr.insertCell(1).innerHTML = '數據2'; tr.insertCell(2).innerHTML = '數據3'; };
在建立表格的時候<table>、<tbody>、<th>沒有特定的方法,須要使用document來建立。也能夠模擬已有的方法編寫特定的函數便可,例如:insertTH()之類的。