这是我的第一个问题,请原谅我的错误,如果有的话。
我正在尝试通过JavaScript向表中添加行。新添加的行将添加到倒数第二个位置,最后一行包含创建新行的按钮。最后一行有id" submitrow",但是获取该元素并将其传递给insertBefore不知何故不起作用。将lastChild作为第二个参数传递给insertBefore也表现为奇数。
在体内,这是形式:
<form>
<input type="hidden" name="submit_done" value="true" />
<table id="formtable">
<tr>
<td>Number : </td>
<td><input type="text" name="num[]" /></td>
</tr>
<tr id="submitrow">
<td><input type="button" value="Add one more" onclick="addRow()" /></td>
<td><input type="submit" value="Go!" /></td>
</tr>
</table>
</form>
这是JavaScript函数:
function addRow(){
var new_tr = document.createElement('tr');
var new_td1 = document.createElement('td');
var new_td2 = document.createElement('td');
var new_input = document.createElement('input');
new_td1.innerHTML = 'Number : ';
new_input.type = 'text';
new_input.name = 'num[]';
new_td2.appendChild(new_input);
new_tr.appendChild(new_td2);
new_tr.insertBefore(new_td1, new_td2);
var formtable = document.getElementById('formtable');
var submitrow = document.getElementById('submitrow');
submitrow.style.backgroundColor='red'; /*Works fine, paints button row red*/
formtable.insertBefore(new_tr, submitrow); /*fails, invalid argument*/
}
现在,问题是:
insertBefore在最后一行失败。请注意,insertBefore已经在new_tr对象上尝试过了,它运行正常。所以唯一的possibe无效参数可以是submitRow,shich在失败的语句之上成功地涂成红色。
如果失败的呼叫,而不是submitrow
,如果使用formtable.lastChild
,它将运行。但后来不知何故,lastChild也包括上排。这意味着,如果我再说4行并在测试输入中输入1,2,3,4,5,然后如果你点击&#34;再添加一个&#34;按钮,现在在4到5之间添加一行!
我已经尝试了很多理由,但在任何一种情况下都没有任何逻辑。
希望有一个解决方案,感谢大家,
Abhay Bhave,印度
答案 0 :(得分:6)
标题应在“JavaScript DOM insertBefore is not em> used ”中更改。
这是因为,即使您没有放入DOM,浏览器也会自动创建一个包裹表行的<tbody>
元素。因此,#formtable
不是 #submitrow
的父级,这就是您遇到错误的原因。
试试这个:
formtable.tBodies[0].insertBefore(new_tr, submitrow);
或者,更一般地说:
submitrow.parentNode.insertBefore(new_tr, submitrow);
(在支持它的浏览器中,甚至还有这个:
submitrow.insertAdjacentElement("beforeBegin", new_tr);
Internet Explorer,Chrome,Safari和Opera支持它,Firefox不会,但它可以轻松填充。无论如何,我不建议使用这些东西。)
而且,作为一般建议,总是在写下表时使用<tbody>
标记:
<table id="formtable">
<tbody>
<tr>
<td>Number : </td>
<td><input type="text" name="num[]" /></td>
</tr>
<tr id="submitrow">
<td><input type="button" value="Add one more" onclick="addRow()" /></td>
<td><input type="submit" value="Go!" /></td>
</tr>
</tbody>
</table>
当然,<thead>
和<tfoot>
当你需要它们时。