继续用DOM的appendChild或inertBefore。。 如:var div = document.createElement("div"); div.appendChild(document.createTextNode("内容"); cell.appendChild(div);不过如果DOM操作的次数太多的话, 可以考虑将所有的东西都写成string,最后的时候再innerHTML(包括之前的table和row) DOM的效率虽然比innerHTML快很多 但当DOM操作次数超过一定次数的话就会发生比单次的innerHTML快string的话,可以用数组先存着,最后再join,会比一直+=快很多 以下提供一个JS的StringBuffer类 function StringBuffer() { this._string = new Array(); } StringBuffer.prototype.Append = function(str) { this._string.push(str); } StringBuffer.prototype.ToString = function() { return this._string.join(""); } //调用方法: var a = new StringBuffer(); a.Append("<table>"); a.Append("<tbody>"); a.Append("<tr>"); a.Append("<td>"); a.Append("<div>内容</div>"); a.Append("</td>"); a.Append("</tr>"); a.Append("</tbody>"); a.Append("</table>"); var b = a.ToString();
上面大错了 但当DOM操作次数超过一定次数的话就会发生比单次的innerHTML慢如以下为例子:<html> <head></head> <body> <div id="aaa"></div> <script language="javascript"> function StringBuffer() { this._string = new Array(); } StringBuffer.prototype.Append = function(str) { this._string.push(str); } StringBuffer.prototype.ToString = function() { return this._string.join(""); } var a = new Date(); var span; for(var i = 0; i < 1000; i++) { span = document.createElement("span"); span.appendChild(document.createTextNode("内容")); document.getElementById("aaa").appendChild(span); } var b = new Date(); alert(b-a);var c = new Date(); var e = new StringBuffer(); for(var i = 0; i < 1000; i++) { e.Append("内容"); } document.getElementById("aaa").innerHTML = e.ToString(); var d = new Date(); alert(d-c); </script> </body> </html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> <title>无标题文档</title> <script type="text/javascript"> var tb; function addrow() { if(tb==null) tb=document.getElementById("tbl"); var oTR=tb.insertRow(); var oTD1=oTR.insertCell(); oTD1.innerHTML="777"; var oTD2=oTR.insertCell(); oTD2.innerHTML="888"; var oTD3=oTR.insertCell(); oTD3.innerHTML="666"; var oTD4=oTR.insertCell(); oTD4.innerHTML="aaa"; } </script> </head> <body> <input name="btn" type="button" value="AddRow" onclick="addrow();" /> <table cellpadding="0" cellspacing="0" border="1" id="tbl"> <tr><td>123</td><td>123</td><td>123</td><td>123</td></tr> <tr><td>456</td><td>456</td><td>456</td><td>456</td></tr> </table> </body> </html>不是很慢呐``` 可以限制其增加的行数,难道你任由用户随意添加?
R=tbl.insertRow();
C=R.insertCell();
C.innerHTML="<td width='18%'><div align=center><input type='checkbox' checked /></div> </td>";
C=R.insertCell() ;
C.innerHTML="<td width='82%' id='td1'>"+x+"</td>" ;
}
var row = table.insertRow(table.rows.length-1);
var cell = row.insertCell(-1); //-1是加在末尾,IE可以忽略参数,但是FF及其它浏览器不能忽略,为了兼容请写上-1吧
cell.appendChild(document.createTextNode("TD的内容"));
//上面的那句也可以换成cell.innerHTML = "TD的内容";
Mozilla仅支持innerHTML而不支持innerText
<head id="Head1" runat="server">
</head>
<body>
<form id="form1" runat="server">
<div>
<table id="tb1" border="1"><tr id="tr1"><td>abc</td></tr></table>
<br />
<br />
<input id="Button1" type="button" value="button" onclick="add()" /></div>
</form>
</body>
</html>
<script>
function add()
{
var tb=document.getElementById("tr1");
var row=document.createElement("tr");
var col=document.createElement("td");
col.innerHTML="<TD>############# </TD>";
row.appendChild(col);
tb.appendChild(row);
}
</script>
在firefox下是没有问题的
3和6楼的大哥们
你都创建了td的DOM节点了
innerHTML还加什么"<td></td>";
别误导人了Orz
你的cell.innerHTML里写了什么?
如果是纯文本的话推荐用cell.appendChild(document.createTextNode("内容"));
或者分浏览器:
IE:cell.innerText = "内容";
FF:cell.textContent = "内容";
如:var div = document.createElement("div");
div.appendChild(document.createTextNode("内容");
cell.appendChild(div);不过如果DOM操作的次数太多的话,
可以考虑将所有的东西都写成string,最后的时候再innerHTML(包括之前的table和row)
DOM的效率虽然比innerHTML快很多
但当DOM操作次数超过一定次数的话就会发生比单次的innerHTML快string的话,可以用数组先存着,最后再join,会比一直+=快很多
以下提供一个JS的StringBuffer类
function StringBuffer()
{
this._string = new Array();
}
StringBuffer.prototype.Append = function(str)
{
this._string.push(str);
}
StringBuffer.prototype.ToString = function()
{
return this._string.join("");
}
//调用方法:
var a = new StringBuffer();
a.Append("<table>");
a.Append("<tbody>");
a.Append("<tr>");
a.Append("<td>");
a.Append("<div>内容</div>");
a.Append("</td>");
a.Append("</tr>");
a.Append("</tbody>");
a.Append("</table>");
var b = a.ToString();
但当DOM操作次数超过一定次数的话就会发生比单次的innerHTML慢如以下为例子:<html>
<head></head>
<body>
<div id="aaa"></div>
<script language="javascript">
function StringBuffer()
{
this._string = new Array();
}
StringBuffer.prototype.Append = function(str)
{
this._string.push(str);
}
StringBuffer.prototype.ToString = function()
{
return this._string.join("");
}
var a = new Date();
var span;
for(var i = 0; i < 1000; i++)
{
span = document.createElement("span");
span.appendChild(document.createTextNode("内容"));
document.getElementById("aaa").appendChild(span);
}
var b = new Date();
alert(b-a);var c = new Date();
var e = new StringBuffer();
for(var i = 0; i < 1000; i++)
{
e.Append("内容");
}
document.getElementById("aaa").innerHTML = e.ToString();
var d = new Date();
alert(d-c);
</script>
</body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>无标题文档</title>
<script type="text/javascript">
var tb;
function addrow()
{
if(tb==null)
tb=document.getElementById("tbl");
var oTR=tb.insertRow();
var oTD1=oTR.insertCell();
oTD1.innerHTML="777";
var oTD2=oTR.insertCell();
oTD2.innerHTML="888";
var oTD3=oTR.insertCell();
oTD3.innerHTML="666";
var oTD4=oTR.insertCell();
oTD4.innerHTML="aaa";
}
</script>
</head>
<body>
<input name="btn" type="button" value="AddRow" onclick="addrow();" />
<table cellpadding="0" cellspacing="0" border="1" id="tbl">
<tr><td>123</td><td>123</td><td>123</td><td>123</td></tr>
<tr><td>456</td><td>456</td><td>456</td><td>456</td></tr>
</table>
</body>
</html>不是很慢呐```
可以限制其增加的行数,难道你任由用户随意添加?