J'essaie d'ajouter des lignes à la tbody
d'une table. Mais j'ai du mal à y parvenir. Premièrement, la fonction où tout se passe est appelée lors du changement d'une liste déroulante à partir d'une page HTML. J'ai créé une chaîne tr
contenant tous les td
à l'intérieur de celle contenant les éléments html, le texte et d'autres éléments. Mais quand j'essaie d'ajouter cette ligne générée à la table en utilisant:
$(newRowContent).appendTo("#tblEntAttributes tbody");
Je rencontre une erreur. Le nom de la table est tblEntAttributes
et j'essaie de l'ajouter à la tbody
.
En réalité, jQuery est incapable d’obtenir tblEntAttributes
en tant qu’élément html. Mais je peux y accéder en utilisant documemt.getElementById("tblEntAttributes");
Pourrais-je y parvenir en ajoutant des lignes à la tbody
de la table. Peut-être un contournement ou quelque chose.
Voici le code complet:
var newRowContent = "<tr><td><input type=\"checkbox\" id=\"" + chkboxId + "\" value=\"" + chkboxValue + "\"></td><td>" + displayName + "</td><td>" + logicalName + "</td><td>" + dataType + "</td><td><input type=\"checkbox\" id=\"chkAllPrimaryAttrs\" name=\"chkAllPrimaryAttrs\" value=\"chkAllPrimaryAttrs\"></td><td><input type=\"checkbox\" id=\"chkAllPrimaryAttrs\" name=\"chkAllPrimaryAttrs\" value=\"chkAllPrimaryAttrs\"></td></tr>";
$("#tblEntAttributes tbody").append(newRowContent);
Une chose que j'ai oublié de mentionner est la fonction dans laquelle ce code est écrit est en fait la fonction de rappel de réussite pour un appel ajax. Je peux accéder à la table en utilisant document.getElementById("tblEntAttributes")
, mais pour une raison quelconque, $(#tblEntAttributes)
ne semble pas fonctionner.
Je n'ai jamais rencontré un problème aussi étrange comme celui-ci! o.O
Savez-vous quel était le problème? $ ne fonctionne pas. J'ai essayé le même code avec jQuery comme jQuery("#tblEntAttributes tbody").append(newRowContent);
et cela fonctionne comme un charme!
Aucune idée pourquoi ce problème étrange se produit!
("#tblEntAttributes tbody")
doit être
$("#tblEntAttributes tbody")
.
Vous ne sélectionnez pas l'élément avec la syntaxe correcte
Voici un exemple des deux
$(newRowContent).appendTo($("#tblEntAttributes"));
et
$("#tblEntAttributes tbody").append(newRowContent);
working http://jsfiddle.net/xW4NZ/
utilisez ceci
$("#tblEntAttributes tbody").append(newRowContent);
Comme @wirey a dit appendTo
devrait fonctionner, sinon vous pouvez essayer ceci:
$("#tblEntAttributes tbody").append(newRowContent);
Voici une version appendTo utilisant le menu déroulant HTML que vous avez mentionné. Il insère une autre ligne sur "changer".
$('#dropdown').on( 'change', function(e) {
$('#table').append('<tr><td>COL1</td><td>COL2</td></tr>');
});
Avec un exemple pour vous de jouer avec. Bonne chance!
Avec Lodash, vous pouvez créer un modèle et procéder comme suit:
<div class="container">
<div class="row justify-content-center">
<div class="col-12">
<table id="tblEntAttributes" class="table">
<tbody>
<tr>
<td>
chkboxId
</td>
<td>
chkboxValue
</td>
<td>
displayName
</td>
<td>
logicalName
</td>
<td>
dataType
</td>
</tr>
</tbody>
</table>
<button class="btn btn-primary" id="test">appendTo</button>
</div>
</div>
</div>
Et voici le javascript:
var count = 1;
window.addEventListener('load', function () {
var compiledRow = _.template("<tr><td><input type=\"checkbox\" id=\"<%= chkboxId %>\" value=\"<%= chkboxValue %>\"></td><td><%= displayName %></td><td><%= logicalName %></td><td><%= dataType %></td><td><input type=\"checkbox\" id=\"chkAllPrimaryAttrs\" name=\"chkAllPrimaryAttrs\" value=\"chkAllPrimaryAttrs\"></td><td><input type=\"checkbox\" id=\"chkAllPrimaryAttrs\" name=\"chkAllPrimaryAttrs\" value=\"chkAllPrimaryAttrs\"></td></tr>");
document.getElementById('test').addEventListener('click', function (e) {
var ajaxData = { 'chkboxId': 'chkboxId-' + count, 'chkboxValue': 'chkboxValue-' + count, 'displayName': 'displayName-' + count, 'logicalName': 'logicalName-' + count, 'dataType': 'dataType-' + count };
var tableRowData = compiledRow(ajaxData);
$("#tblEntAttributes tbody").append(tableRowData);
count++;
});
});
La voici dans jsbin