La questionAjouter TR après appariées, ou à la fin si ensemble apparié est vide dans jQuery
Je voudrais ajouter un nouveau TR dans une table après un ensemble assorti donné, ou au lieu, au fin de la table si l'ensemble correspondant est vide. Étant donné le code html suivant:
<table id="blax">
<thead>
</thead>
<tbody>
<tr class="alpha">
<td>some stuff</td>
<td>more stuff</td>
</tr>
<tr class="alpha">
<td>some stuff</td>
<td>more stuff</td>
</tr>
<!-- new "alpha" tr to go here-->
<tr class="beta">
<td>some stuff</td>
<td>more stuff</td>
</tr>
<tr class="beta">
<td>some stuff</td>
<td>more stuff</td>
</tr>
<!-- but new "gamma" tr to go at end-->
</tbody>'
</table>
Je sais comment ajouter une nouvelle tr après un ensemble assorti, par exemple:
var b = $('#blax tbody');
var newAlphaTr = $('<tr class="alpha"></tr>')
.insertAfter(b.find('tr.alpha:last'));
Mais si le code est exécuté pour la classe gamma
(qui n » t existe encore dans la table)? Quel est un moyen facile de faire ensuite le point d'insertion du nouvel élément <tr class="gamma"></tr>
juste aller à la fin de la table en utilisant le même code que celui utilisé pour l'insertion alpha?
function insertAtPosition(parentElement, afterElement, newElement) {
// some code here that does the job for either "alpha" or "gamma"
}
function creatElement(className) {
insertAtPosition(
b,
b.find('tr.' + className + ':last'),
$('<tr class="' + className + '"></tr>'
);
}
createElement('alpha');
createElement('gamma');
J'ai besoin d'aide pour remplir le bloc "code ici".
Maintenant, pour certains bavardages
et fait d'ailleurs insertAfter
ramener l'élément inséré ou l'élément auquel il a été ajouté après? Je devine que after
renvoie l'élément inséré et insertAfter
renvoie l'article auquel il était attaché, comme comme la façon append
et appendTo
de travail, oui? Les docs de jQuery sont sympas mais ont quelques gros trous comme ne pas énumérer ce qui est retourné de chaque fonction (et je suis assez perplexe quant à la façon dont n'importe qui pourrait manquer cela). En fait, au moment où j'écrivais cette question, il m'a fallu beaucoup de concentration pour m'assurer que j'avais bien compris. Juste en pensant, il serait bien que append
et appendTo
supportent un paramètre facultatif qui est soit une position d'index, soit un élément enfant immédiat (ou un ensemble d'éléments enfants immédiats) après tout dont l'élément sera ajouté. Dans le cas de l'index, il pourrait s'agir de la position désirée ou de la position après laquelle insérer l'élément, de sorte que 0 ou -1 signifierait le premier enfant.
var b = $('#blax tbody');
var newAlphaTr = $('<tr class="alpha"></tr>')
.appendTo(b, $('tr.alpha', b));
// or perhaps a selector
var newAlphaTr2 = $('<tr class="alpha"></tr>')
.appendTo(b, 'tr.alpha:last');
Ce introduirait une nouvelle classe B par alpha
après jeu enfant spécifié. Je pourrais ajouter :last
au sélecteur mais de cette façon serait bien. Si l'ensemble correspondant de 'td.alpha' est vide, alors il agirait comme l'append normalement et le mettrait après les enfants existants.
Veuillez relire la question. Je veux que le nouveau tr soit dans la table à un endroit précis, pas seulement à la fin à chaque fois. – ErikE