J'ai une table sur laquelle je suis en train d'ajouter des lignes dynamiquement: http://jsfiddle.net/fmuW6/5/
Maintenant, j'aimerais ajouter une nouvelle colonne à la table avec un clic d'un bouton. L'utilisateur saisira l'en-tête de colonne dans une zone de texte.
Comment puis-je atteindre cet objectif? Si l'utilisateur ajoute 4 lignes, le bouton Add a new Column
devrait prendre soin de toutes les lignes existantes (ajouter une case à cocher dans chacune d'elles).
mettre à jour
Je cherche à ajouter le nom de la colonne et la case à cocher au niveau de la ligne.
J'ai donc ajouté la zone de texte dans laquelle l'utilisateur saisira le nom de la colonne: http://jsfiddle.net/fmuW6/10/
<input type=text placeholder='columnname'/> <button type="button" id="btnAddCol">Add new column</button></br></br>
Alors, lorsque l'utilisateur clique sur le bouton, le nom de la colonne devrait être la valeur dans la zone de texte et au niveau de la ligne devrait être les cases à cocher. Donc, fondamentalement, la nouvelle colonne devrait être ajoutée à tous les tr
dans le tableau, à l'exception de la première ligne puisque ce sont les noms des colonnes
J'ai mis à jour votre violon avec un petit exemple comment vous pourriez le faire.
JsFiddle – Lien
var myform = $('#myform'), iter = 0; $('#btnAddCol').click(function () { myform.find('tr').each(function(){ var trow = $(this); if(trow.index() === 0){ trow.append('<td>Col+'iter+'</td>'); }else{ trow.append('<td><input type="checkbox" name="cb'+iter+'"/></td>'); } }); iter += 1; });
Cela ajouterait une nouvelle colonne à chaque ligne, y compris une variable de compte qui est appliquée à la première ligne comme nom et au nom-attribut des cases sur les lignes suivantes.
Envisager d'utiliser th
-elements pour l'en-tête de la table, de cette façon, vous n'auriez pas besoin de l'index-check que je fais et il serait plus sémantiquement correct.
J'ai laissé de côté la partie où l'utilisateur mettrait un nom pour la colonne, mais comme vous le voyez, vous pouvez simplement remplacer la valeur iter
par celle-ci à la fin.
La réponse fonctionne, mais voici encore une façon alternative d'utiliser thead et tbody!
http://jsfiddle.net/afzaalace/QNP3r/
JS $('#irow').click(function(){ if($('#row').val()){ $('#mtable tbody').append($("#mtable tbody tr:last").clone()); $('#mtable tbody tr:last :checkbox').attr('checked',false); $('#mtable tbody tr:last td:first').html($('#row').val()); } }); $('#icol').click(function(){ if($('#col').val()){ $('#mtable tr').append($("<td>")); $('#mtable thead tr>td:last').html($('#col').val()); $('#mtable tbody tr').each(function(){$(this).children('td:last').append($('<input type="checkbox">'))}); } });
Utilisez ce code pour ajouter une nouvelle colonne:
$('#btnAddCol').click(function () { $("tr").append("<td>New Column</td>"); });
Mais vous devez modifier la valeur de la première ligne avec un texte et d'autres pour inclure un <input type="checkbox" />
. Et il vaut mieux
Vérifiez jsFiddle ……………………….. http://jsfiddle.net/fmuW6/8/
$(document).ready(function () { $('#btnAdd').click(function () { var count = 3, first_row = $('#Row2'); while(count-- > 0) first_row.clone().appendTo('#blacklistgrid'); }); $('#btnAddCol').click(function () { $("#blacklistgrid tr").each(function(){ $(this).append("<td>test</td>"); }) }); });