jQuery Clone表行

Cli*_*een 42 jquery clone

我有一个表格,末尾有一个添加按钮.当您单击此按钮时,我希望在当前一个下面创建一个新的表行.我还希望此行上的输入字段为空.我试图使用.clone()来做这个,但它克隆了页面上的所有行.请帮忙.谢谢

脚本

$("input.tr_clone_add")
        .live('click', function(){
              $(this).closest('.tr_clone')
                    .clone()
                    .insertAfter(".tr_clone")
         });
Run Code Online (Sandbox Code Playgroud)

HTML

<table width="100%" border="0" cellspacing="0" cellpadding="0" id="table-data">
<tr>
<td>Name</td>
<td>Location</td>
<td>From</td>
<td>To</td>
<td>Add</td>
</tr>
<tr class="tr_clone">
<td><input type="text" autofocus placeholder="who" name="who" ></td>
<td><input type="text" autofocus placeholder="location" name="location" ></td>
<td><input type="text" placeholder="Start Date" name="datepicker_start" class="datepicker"></td>
<td><input type="text" placeholder="End Date" name="datepicker_end" class="datepicker"></td>
<td><input type="button" name="add" value="Add" class="tr_clone_add"></td>
</tr>
</table><!-- /table#table-data -->
Run Code Online (Sandbox Code Playgroud)

mu *_*ort 65

你的问题是你的insertAfter:

.insertAfter(".tr_clone")
Run Code Online (Sandbox Code Playgroud)

每次插入后.tr_clone:

匹配的元素集将插入此参数指定的元素之后.

您可能只想after在要复制的行上使用.稍微.find(':text').val('')清除克隆的文本输入; 这样的事情:

var $tr    = $(this).closest('.tr_clone');
var $clone = $tr.clone();
$clone.find(':text').val('');
$tr.after($clone);
Run Code Online (Sandbox Code Playgroud)

演示:http://jsfiddle.net/ambiguous/LAECx/

我不确定哪个输入应该以焦点结束,所以我一个人就离开了.

  • @mzvarik 为什么?前导 `$` 是一个常见的提醒,你有元素包裹在 jQuery 中,而不仅仅是简单的元素。在任何地方使用它们,因为您的手指认为在 PHP 中会是一个坏习惯,但在这里并非如此。 (2认同)

Šim*_*das 17

干得好:

$( table ).delegate( '.tr_clone_add', 'click', function () {
    var thisRow = $( this ).closest( 'tr' )[0];
    $( thisRow ).clone().insertAfter( thisRow ).find( 'input:text' ).val( '' );
});
Run Code Online (Sandbox Code Playgroud)

现场演示: http ://jsfiddle.net/RhjxK/4/


更新:在jQuery中委派事件的新方法是

$(table).on('click', '.tr_clone_add', function () { … });
Run Code Online (Sandbox Code Playgroud)


小智 7

下面的代码将克隆最后一行并在表格的最后一行之后添加:

var $tableBody = $('#tbl').find("tbody"),
$trLast = $tableBody.find("tr:last"),
$trNew = $trLast.clone();

$trLast.after($trNew);
Run Code Online (Sandbox Code Playgroud)

工作示例:http://jsfiddle.net/kQpfE/2/