考虑这个http://jsfiddle.net/99CL3/224/,点击
添加行HTML
<br /><br />
<table id="tbl">
<tr>
<td><input type="text" name="links" /></td>
<td><input type="text" name="keywords" /></td>
<td><input type="text" name="violationtype" /></td>
<td><input type="submit" class="button" value="Add another line" onclick="addField(this);" /></td>
</tr>
</table>
JS
function addField(n)
{
var tr = n.parentNode.parentNode.cloneNode(true);
document.getElementById('tbl').appendChild(tr);
}
我试图理解为什么这个在点击上添加行的代码实际上有效。
首先,我意识到它将采取我点击(输入),并在它上面的两个父节点。
所以第一个.parentNode
指向td
,而tr
指向.cloneNode(true)
。所以基本上我们正在使用这些新属性创建一个表。现在我的问题基本上是n.parentNode.parentNode
在这里的作用是什么?我已阅读过mozilla文档,但我无法从他们的示例中了解到。为什么我不能马上追加CsvList
?
答案 0 :(得分:1)
每个元素都是独一无二的。如果您不克隆该元素,则该元素将移动到目标位置。因此,在此处使用clone
是创建另一个行所必需的。
答案 1 :(得分:0)
.cloneNode(true)复制选定的[tr]标记,如果删除它,您的代码会起作用,但其行为不同,因为您选择的[tr]已经属于您的表格。
顺便说一句,您应该更改克隆行输入的名称/ ID,以使其唯一。
p.s:你的jsfiddle只有一个parentNode,而不是两个。