2010-03-31 87 views
3

有人可能會建議我使用現有DOM對象(如表格行)並將其克隆/將其添加到DOM之後的現有原始對象,也允許刪除它或添加其他人。DOM對象cloner Javascript小部件

爲了更好地解釋我自己想要的是一個例子。

可以說我有一個表有一個初始行(包含一些空字段)。小部件會在行的一側添加一個按鈕,以允許添加一個新行(通過將空行增加一倍)或者更多,並且它會在添加的行旁邊添加一個刪除按鈕以刪除克隆除原始行之外的行(第一行)。

我發現了一個類似於這個叫做Multi Field Extender的jQuery小部件,但是我在Internet Explorer上遇到了一些問題,它禁用了這個小部件。我試圖谷歌它,但我沒有找到任何替代它。先謝謝你!

+0

我想你最好用手工製作的。只需將html複製到一個Javascript變量中,並執行'newrow =' ..'',並且'' 。 – bradlis7 2010-03-31 16:47:34

回答

1

假設你的HTML是這樣的:

<tr> 
    <td> 
    <input type = "submit" class = "grow" value = "Add another row" /> 
    </td> 
</tr> 

你jQuery來添加一個新行可能是:

$("input.grow").live('click',function(){ 
    var $row = $(this).closest('tr'); 
    $row.clone(true).insertAfter($row); 
}); 

注:未經檢驗的,但這個想法的聲音。

1

的是這樣開始:

​<table> 
    <tr> 
    <td><input type="text" /></td> 
    <td><input type="checkbox" /></td> 
    <td><input type="button" class="addRow" value="Add" /></td> 
    </tr> 
</table>​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​ 

這個jQuery將用於添加/刪除工作:

​$(​​​'table').delegate('​​​.addRow', 'click', function() { 
    var r= $(this).closest('tr').clone(true); 
    if(r.find('.removeRow').length === 0) 
    r.append('<td><input type="button" class="removeRow" value="Remove" /></td>'); 
    r.insertAfter($(this).closest('tr')); 
}).delegate('.removeRow', 'click', function() { 
    $(this).closest('tr').remove(); 
}); 

You can see a quick demo here。這隻取決於添加按鈕的存在,無論在行中的任何內容都將被複制,包括輸入中的當前值(以及任何事件處理程序等)。如果您需要手動添加Add按鈕,然後只需添加這上的document.ready來創建它:

$('table tr:first-child') 
    .append('<td><input type="button" class="addRow" value="Add" /></td>'); 
​ 
+0

這很整齊。它也重複了這些值,我認爲他正試圖避免。可能有一種方法可以刪除所有代碼末尾添加約70個字符的值。 – bradlis7 2010-03-31 16:55:41

+0

由於時間不夠,我沒有嘗試自己編寫一個小部件(我認爲它會是一個比它更大的問題),但現在我認爲我會做到這一點,至於值(與該行)解決方案非常簡單。我可以迭代所有的輸入元素,並在將行添加到現有元素之前清空它們。 – crazybyte 2010-03-31 17:18:01