<table id="tbLinkman" border=1>
<tr>
<td>
fsdfsdf
</td>
</tr>
</table>
<input id='uu' type="button" x_x_onClick="funn()" value="send"/><script type="text/javascript">
var tableObj = document.getElementById('tbLinkman');
rowObj = tableObj.rows[0].cloneNode(true);
function funn(){
tmpTrObj = tableObj.lastChild.appendChild(rowObj);
}
</script>
这样子写,点击按钮只能创建一个tr,再点击就不起作用
<table id="tbLinkman" border=1>
<tr>
<td>
fsdfsdf
</td>
</tr>
</table>
<input id='uu' type="button" x_x_onClick="funn()" value="send"/><script type="text/javascript">
var tableObj = document.getElementById('tbLinkman');
function funn(){
rowObj = tableObj.rows[0].cloneNode(true);
tmpTrObj = tableObj.lastChild.appendChild(rowObj);
}
</script>
这样子写可以随意创建。
据说appendchild会删除原元素,可是我是克隆出来的元素,而且(rowObj == tableObj.rows[0]) 是false,足以说明它不会删除table上现有的tr,那就没有办法解释这个问题了。
一.我想知道这是为什么。
二.我必须把cloneNode放到函数外面,因为第一行tr有可能被删掉,因此如果放到函数里面每次都克隆一遍,很有可能这时第一行已经没有了。
大家感兴趣的一块儿探讨吧。
<tr>
<td>
fsdfsdf
</td>
</tr>
</table>
<input id='uu' type="button" x_x_onClick="funn()" value="send"/><script type="text/javascript">
var tableObj = document.getElementById('tbLinkman');
rowObj = tableObj.rows[0].cloneNode(true);
function funn(){
tmpTrObj = tableObj.lastChild.appendChild(rowObj);
}
</script>
这样子写,点击按钮只能创建一个tr,再点击就不起作用
<table id="tbLinkman" border=1>
<tr>
<td>
fsdfsdf
</td>
</tr>
</table>
<input id='uu' type="button" x_x_onClick="funn()" value="send"/><script type="text/javascript">
var tableObj = document.getElementById('tbLinkman');
function funn(){
rowObj = tableObj.rows[0].cloneNode(true);
tmpTrObj = tableObj.lastChild.appendChild(rowObj);
}
</script>
这样子写可以随意创建。
据说appendchild会删除原元素,可是我是克隆出来的元素,而且(rowObj == tableObj.rows[0]) 是false,足以说明它不会删除table上现有的tr,那就没有办法解释这个问题了。
一.我想知道这是为什么。
二.我必须把cloneNode放到函数外面,因为第一行tr有可能被删掉,因此如果放到函数里面每次都克隆一遍,很有可能这时第一行已经没有了。
大家感兴趣的一块儿探讨吧。
关于第一中文什么只添加一次,个人理解是这样:rowObj这个对象没有变更,你添加行实际上引用rowObj来添加,你每次都引用它添加,所以他只会有一行。所以你必须每次生成一个新对象。
第二个问题你可以用两种方式解决:
1、设置一个隐藏的行,让他不显示
<tr style="display:none"><td>fsdfsdf</td></tr>
这样不可能删除掉它。然后复制它到rowObj,rowObj.style.display = "block";然后appendChild;
2、动态的生成你的rowObj,用
var tr = document.createElement("tr");
var td = document.createElement("td");
td.innerHTML=……;
tr.appendChild(td);
var td = document.createElement("td");
td.innerHTML=……;
tr.appendChild(td);
……
tbody.appendChild(tr)这种形式。
挨个创建td也是可以的,可是我的table的每个td栏位是读取数据库动态生成的,栏位有多少个也是后台设定的,栏位里会有日期控件,选人控件,等各种自己封装的控件.挨个儿td去生成还不如直接克隆第一个tr.
<table id="tbLinkman" border=1>
<tr>
<td>
fsdfsdf
</td>
</tr>
</table>
<input id='uu' type="button" onclick="funn()" value="send"/> <script type="text/javascript">
function funn()
{
var tableObj = document.getElementById('tbLinkman');
var rowObj = tableObj.rows[0].cloneNode(true);
// NOTE: tableObj.firstChild 是 tBody,至少 IE 下如此!
tableObj.firstChild.appendChild(rowObj);
//alert(tableObj.innerHTML);
}
</script> 送你三本手册! DHTML参考手册
http://download.csdn.net/source/308913 样式表中文手册
http://download.csdn.net/source/304124 JScript语言参考
http://download.csdn.net/source/308916
谢谢 william3033
rowObj = tableObj.rows[0].cloneNode(true);还是放到全局中,
在funn()函数中再克隆一下,cloneRowObj = rowObj.cloneNode(true); 这样子每次appendchild中的参数都不一样就可以了。