方法一:DOM实现
//先获取该表格的引用:
var Container = document.getElementById(TableId);
//然后创建行(TR对象)
var NewTr = document.createElement("tr");
//填充该表格行
var NewTd1 = document.createElement("td");
var NewTd2 = document.createElement("td");
......
NewTr.appendChild(NewTd1);
NewTr.appendChild(NewTd2);
......
下面要做的是继续填充新建好的单元格
另外一种填充表格行的方式是
NewTr.innerHTML = " ........ ";
接下来,要在DOM树中指定NewTr的父节点,
在表格的DOM中,TR的父结点应该是TBODY这个几乎被遗忘的对象.
var LastTr = Container.rows[Container.rows.length - 1];
LastTr.parentNode.appendChild(NewTr);
通常来讲,从表格中删除某一行一般是通过表格的deleteRow()方法和行的rowIndex属性来删除,如下,欲删除刚刚添加的新行:
var Container = document.getElementById(TableId);
var LastTrIndex = Container.rows.length - 1; // 表格最后一行
Container.deleteRow(LastTrIndex);
例子:
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
- <HTML>
- <HEAD>
- <TITLE>动态表格</TITLE>
- <META NAME="Generator" CONTENT="EditPlus">
- <META NAME="Author" CONTENT="">
- <META NAME="Keywords" CONTENT="">
- <META NAME="Description" CONTENT="">
- <script type="text/javascript">
- function addOneRow(){
- //判断是否传入足够参数
- if(arguments.length <= 1 ){
- return "error";
- }
- try{
- //获取table句柄
- var tb=document.getElementById(arguments[0]);
- //添加一行
- var newTr = tb.insertRow();
- for(var i=1 ;i < arguments.length;i++){
- //添加一列
- var newTd = newTr.insertCell();
- newTd.innerHTML = arguments[i];
- }
- }catch (e) {
- return e.toString();
- }
- return "true";
- }
- function deleteOneRow(){
- //判断是否传入足够参数
- if(arguments.length == 0){
- return "error";
- }
- var thisTag = arguments[0];
- try{
- //获取句柄
- var obj = getThisObj(thisTag);
- //寻找最靠近的table
- while (obj.nodeName.toUpperCase() != 'TABLE'){
- objobj =obj.parentElement;
- }
- //删除一行
- var newTr = obj.deleteRow(getTrRowOfTable(thisTag));
- }catch (e) {
- return e.toString();
- }
- return "true";
- }
- function getTableMaxRow(){
- //判断是否传入足够参数
- if(arguments.length == 0 ){
- return "error";
- }
- try{
- //获取句柄
- var obj = getThisObj(arguments[0]);
- //寻找最靠近的table
- while (obj.nodeName.toUpperCase() != 'TABLE'){
- objobj =obj.parentElement;
- }
- return obj.rows.length;
- }catch (e) {
- return e.toString();
- }
- }
- function getTrRowOfTable(){
- //判断是否传入足够参数
- if(arguments.length == 0 ){
- return "error";
- }
- try{
- //获取传入标签的句柄
- var obj = getThisObj(arguments[0]);
- //寻找最靠近的TR
- while (obj.nodeName.toUpperCase() != 'TR'){
- objobj =obj.parentElement;
- }
- //返回TR的行号
- return obj.rowIndex;
- }catch (e) {
- //返回异常信息
- return e.toString();
- }
- }
- //获取指定标签的句柄
- function getThisObj(){
- var obj;
- //若定义了id
- if(arguments[0].id != ""){
- obj=document.getElementById(arguments[0].id);
- return obj;
- }
- //若定义了name
- if(arguments[0].name != ""){
- //通过name取句柄得到的是个数组,所以必须保证该name页面唯一
- obj=document.getElementsByName(arguments[0].name)[0];
- return obj;
- }
- }
- function showInfo(){
- //显示本行号
- alert("当前行号为:"+ getTrRowOfTable(arguments[0]));
- //显示总行数
- alert("总行数为:"+ getTableMaxRow(arguments[0]));
- }
- var rowId=1;
- function addRow(){
- var tagStr="<input type=text value=ccc name="+rowId+" onclick='addRow();showInfo(this)' onchange='deleteOneRow(this);'>";
- addOneRow("tb",tagStr);
- rowId++;
- }
- </script>
- </HEAD>
- <BODY onload="addRow();">
- <table id="tb"></table>
- </BODY>
- </HTML>