我正在使用jquery动态地向表中添加列和行。
我遇到的问题是我正在使用以下代码添加行:
$('#colorgrid').append("<tr id='Row2' class='input-row'><td><input type='text' name='shade' placeholder='shade'/></td><td ><input type='checkbox' name='asdf'/></td><td ><input type='checkbox' name='shade'/></td><td ><input type='checkbox' name='color'/></td></tr>")
因此,在我添加一列然后添加一行后,它缺少一个复选框。请看下面的屏幕截图:
理想情况下,每当添加新行时,我希望它填充复选框中的许多列,并使用列名填充复选框的name
属性。
问题
如何添加一个新行,使其真正动态,我不会硬编码行的内容。它应该用复选框填充所有列,并将它们命名为与列标题相对应。
答案 0 :(得分:2)
你应该研究JQuery's Clone function。您可以克隆最后一行或第一行,而无需对要添加的元素进行硬编码。这将复制所有元素,包括新列。
<div class="container">
<div class="hello">Hello</div>
<div class="goodbye">Goodbye</div>
</div>
$('.hello').clone().appendTo('.container');
这应该产生
<div class="container">
<div class="hello">Hello</div>
<div class="goodbye">Goodbye</div>
<div class="hello">Hello</div>
</div>
在执行name
之前,您需要修改每个元素的id
,value
和appendTo
(如果需要)。您也可以使用jQuery。要查找每个input
元素:
newRow.find('input').each(function () {
var $inputElem = $(this);
$inputElem.attr('id', 'newId'); //change this to something more dynamic
$inputElem.attr('name', 'newName'); //change this to something more dynamic
}
答案 1 :(得分:2)
安迪的答案更清晰,您可能希望在修改其中的元素时这样做。但是,如果它不是“复制但不同”的情况,而是“复制某些部分的新行”,this fork might help。
此处的技术涉及创建一个新行,然后使用jQuery's each method遍历每个所需的表标题(此处指定在表中选择#Row1 th:not(.space)
,即“{{1}中的标题} {不是#Row1
“),使用jQuery's trim使其内部文本没有多余的空格(换行符,缩进),然后附加一个新的单元格和输入,并将该值作为每个值的名称