一段js代码执行失败

小灰狼 2012-08-28 02:32:31

function f(header){
var t = document.createElement("table");
t.innerHTML = header;
for(var i=0; i<3; i++){
var tr = t.insertRow(table.rows.length);
for(var j=0; j<2; j++){
var td = tr.insertCell(j);
td.innerText = "aa_" + i + ", " + j;
}
}
}

f("<tr><th>col1</th><th>col2</th></tr>");


在t.innerHTML = header; 时失败
这是为什么?

我的目标是,希望在动态创建 table 对象时,它的表头可以由调用者来指定,就是函数 f 中传进来的参数
...全文
180 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
Go 旅城通票 2012-08-29
  • 打赏
  • 举报
回复
IE直接设置innerHTML没搞,出错,使用DOM来操作,你传递数据进去就好了,

<table width="400px" border="1" style="border-collapse:collapse">
<thead id="tHead"></thead>
<tr>
<td>Smith</td><td>2000-01-23</td><td>Male</td><td>China</td>
</tr>
<tr>
<td>Smith</td><td>2000-01-23</td><td>Male</td><td>China</td>
</tr>
</table>
<script>
var heads = [
[{ rowSpan: 2, align: 'center', innerHTML: 'Name' }, { colSpan: 3, align: 'center', innerHTML: 'Others'}]//第一行的td放数组里面
, [{ innerHTML: 'Birth' }, { innerHTML: 'Gender' }, { innerHTML: 'Address'}]//第一行的td放数组里面
]
, thead = document.getElementById('tHead'), tr, td, item, i, j, headLen = heads.length, tdLen;

for (i = 0; i < headLen; i++) {
tr = thead.insertRow(i);
item = heads[i];
tdLen = item.length;
for (j = 0; j < tdLen; j++) {
td = tr.insertCell(j);
for (attr in item[j]) td[attr] = item[j][attr];
}
}
</script>
小灰狼 2012-08-29
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]

引用 3 楼 的回复:
IE直接设置table的innerHTML会发生未知运行时错误,改为DOM操作就好了

JScript code

function f(header) {
header = header.split(',');
var t = document.createElement("table"), tr, td, columnNum = header……

……
[/Quote]
我知道这样可以,但是无法满足我的需求啊,看我在5楼的回复
小灰狼 2012-08-29
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]

IE直接设置innerHTML没搞,出错,使用DOM来操作,你传递数据进去就好了,
HTML code

<table width="400px" border="1" style="border-collapse:collapse">
<thead id="tHead"></thead>
<tr>
<td>Smith</td><td>2000-01-23</td><td>Mal……
[/Quote]
这个,好象只能这样了
泡泡鱼_ 2012-08-28
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]
IE直接设置table的innerHTML会发生未知运行时错误,改为DOM操作就好了

JScript code

function f(header) {
header = header.split(',');
var t = document.createElement("table"), tr, td, columnNum = header……
[/Quote]

+1;像这样动态创建就OK了
小灰狼 2012-08-28
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

IE直接设置table的innerHTML会发生未知运行时错误,改为DOM操作就好了
JScript code

function f(header) {
header = header.split(',');
var t = document.createElement("table"), tr, td, columnNum = header.len……
[/Quote]
用DOM的方式我知道可以,但是这样表头就只能有一行了,我希望我的表头可以复杂一点,支持两行或者三行还有合并,到底怎么做由调用者来决定。因此,这些信息只能在应用的时候通过外部传进来,比如下面的表格

<table width="400px" border="1" style="border-collapse:collapse">
<tr><td rowspan="2" align="center">Name</td><td colspan="3" align="center">Others</td></tr>
<tr><td>Birth</td><td>Gender</td><td>Address</td></tr>
<tr>
<td>Smith</td><td>2000-01-23</td><td>Male</td><td>China</td>
</tr>
<tr>
<td>Smith</td><td>2000-01-23</td><td>Male</td><td>China</td>
</tr>
</table>
小灰狼 2012-08-28
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

少了个容器
HTML code


<div id="test"></div>
<script type="text/javascript">
function f(header) {
var oTest = document.getElementById("test");
var t = document.createElement("table")……
[/Quote]

这里不是少了容器的问题,而是 table 类型的 dom 对象在设置它的 innerHTML 值时会报未知错误:
t.innerHTML = header;
Go 旅城通票 2012-08-28
  • 打赏
  • 举报
回复
IE直接设置table的innerHTML会发生未知运行时错误,改为DOM操作就好了

function f(header) {
header = header.split(',');
var t = document.createElement("table"), tr, td, columnNum = header.length;
document.body.appendChild(t);
tr = t.insertRow(0);
for (var i = 0; i < columnNum; i++) {
td = document.createElement('th');tr.appendChild(td) ;td.innerHTML = header[i];
}
for (var i = 0; i < 3; i++) {
tr = t.insertRow(t.rows.length);
for (var j = 0; j < columnNum; j++) {
td = tr.insertCell(j);
td.innerHTML = "aa_" + i + ", " + j;
}
}
}

window.onload = function () { f("col1,col2,col3,col4"); }
小伙写代码 2012-08-28
  • 打赏
  • 举报
回复
少了个容器


<div id="test"></div>
<script type="text/javascript">
function f(header) {
var oTest = document.getElementById("test");
var t = document.createElement("table");
t.innerHTML = header;
for (var i = 0; i < 3; i++) {
var tr = t.insertRow(t.rows.length);
for (var j = 0; j < 2; j++) {
var td = tr.insertCell(j);
td.innerText = "aa_" + i + ", " + j;
}
}
oTest.insertBefore(t, oTest.childNodes[0]);
}
f("<tr><th>col1</th><th>col2</th></tr>");
</script>
小伙写代码 2012-08-28
  • 打赏
  • 举报
回复
少了个容器


<div id="test"></div>
<script type="text/javascript">
function f(header) {
var oTest = document.getElementById("test");
var t = document.createElement("table");
t.innerHTML = header;
for (var i = 0; i < 3; i++) {
var tr = t.insertRow(t.rows.length);
for (var j = 0; j < 2; j++) {
var td = tr.insertCell(j);
td.innerText = "aa_" + i + ", " + j;
}
}
oTest.insertBefore(t, oTest.childNodes[0]);
}
f("<tr><th>col1</th><th>col2</th></tr>");
</script>

87,904

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧