web-dev-qa-db-fra.com

jQuery ajouter une colonne de table HTML

J'ai un tableau HTML comme celui-ci:

<table border="1">
    <tbody>
        <tr>
            <td><a href="#" class="delete">DELETE ROW</a>COL 1</td>
            <td><a href="#" class="delete">DELETE COL</a>COL 2</td>
            <td><a href="#" class="delete">DELETE COL</a>COL 3</td>
            <td><a href="#" class="delete">DELETE COL</a>COL 4</td>
            <td><a href="#" class="delete">DELETE COL</a>COL 5</td>
            <td><a href="#" class="delete">DELETE COL</a>COL 6</td>
        </tr>
        <tr>
            <td>ROW 1</td>
            <td>ROW 1</td>
            <td>ROW 1</td>
            <td>ROW 1</td>
            <td>ROW 1</td>
            <td>ROW 1</td>
        </tr>
        <tr>
            <td>ROW 2</td>
            <td>ROW 2</td>
            <td>ROW 2</td>
            <td>ROW 2</td>
            <td>ROW 2</td>
            <td>ROW 2</td>
        </tr>
    </tbody>
</table>

Ce dont j'ai besoin est une fonction pour ajouter une nouvelle colonne avec un certain nombre de td basés sur d'autres colonnes. Le fait est que dans ce tableau HTML, les colonnes sont supprimées avec jQuery avant que de nouvelles colonnes soient ajoutées, de sorte que la fonction doit obtenir la configuration de colonne actuelle et s'adapter en conséquence car les lignes et les colonnes sont toujours supprimées ou ajoutées.

J'ai ce code pour ajouter une nouvelle colonne mais il n'ajoute pas l'en-tête:

function addACol() {
    var currentNumberOfTDsInARow = $('.tblModel tr:first td').length;
    newColNum = currentNumberOfTDsInARow;
    var rows = $('.tblModel tbody tr');
    for (var i = 0; i < rows.length; i++) {
        var lastTDClone = $(rows[i]).find('td:last').clone();
        $(rows[i]).find('td:last').after(lastTDClone);
    }
}
20
Manny Calavera

Mettre à jour...

var c = $("#myTable tr:first td").length;
$("#myTable tr:first").append("<td><a href=''>Delete</a> Col "+(c+1)+"</td>");
$("#myTable tr:gt(0)").append("<td>Col</td>");

Si vous devez corriger la numérotation dans les titres, vous pouvez utiliser la fonction sur laquelle nous avons travaillé dans votre question précédente .

Réponse originale ...

$("#myTable tr").append("<td>New Column</td>");

Ou, si vous souhaitez également ajouter un en-tête, vous pouvez limiter la ligne précédente à tous les TR supérieurs à 0:

$("#myTable tr:gt(0)").append("<td>New Column</td>");

Et l'en-tête ne serait que sur le premier TR:

$("#myTable tr:first").append("<td>Delete Column LINK</td>");
43
Sampson

Pas lié à votre question mais vous pouvez rendre votre bit HTML plus sémantique.

<table border="1">
    <thead>
        <tr>
            <th><a href="#" class="delete">DELETE ROW</a>COL 1</th>
            <th><a href="#" class="delete">DELETE COL</a>COL 2</th>
            <th><a href="#" class="delete">DELETE COL</a>COL 3</th>
            <th><a href="#" class="delete">DELETE COL</a>COL 4</th>
            <th><a href="#" class="delete">DELETE COL</a>COL 5</th>
            <th><a href="#" class="delete">DELETE COL</a>COL 6</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>ROW 1</td>
            <td>ROW 1</td>
            <td>ROW 1</td>
            <td>ROW 1</td>
            <td>ROW 1</td>
            <td>ROW 1</td>
        </tr>
        <tr>
            <td>ROW 2</td>
            <td>ROW 2</td>
            <td>ROW 2</td>
            <td>ROW 2</td>
            <td>ROW 2</td>
            <td>ROW 2</td>
        </tr>
    </tbody>
</table>

Le code jQuery modifié peut ressembler à:

var c = $("#myTable thead th").length;
$("#myTable thead tr").append("<th><a href=''>Delete</a> Col "+(c+1)+"</th>");
$("#myTable tr:gt(0)").append("<td>Col</td>");
10
SolutionYogi