【发布时间】:2013-11-13 04:26:17
【问题描述】:
这是我的第一个问题,请原谅我的错误。
我正在尝试通过 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 在最后一行失败。请注意,在 new_tr 对象上也已尝试过 insertBefore,它工作正常。所以唯一可能的无效参数可以是 submitRow,在失败的语句上方仅一行被成功地涂成红色。
如果对于失败的调用,而不是
submitrow,如果使用formtable.lastChild,它会运行。但是不知何故 lastChild 也包括上排。这意味着,如果我再输入 4 行并在测试输入中输入 1、2、3、4、5,然后如果您点击“再添加一个”按钮,那么现在在 4 到 5 之间添加了一行!
我已经尝试了很多推理,但无法理解这两种情况背后的逻辑。
希望有解决办法,谢谢大家,
Abhay Bhave,印度
【问题讨论】:
标签: javascript dom