2009-10-22 5 views
2

J'ai une fonction appelée sur le clic d'un lien dans un TD. En cliquant, je traverse le DOM vers le TR que le lien était à l'intérieur, puis créer un nouveau TR après.La façon la plus succint de faire référence à un objet nouvellement créé dans jQuery?

Jusqu'ici tout va bien.

Maintenant que j'ai créé ce nouveau TR, avec un TD à l'intérieur, quel est le meilleur pour se référer maintenant à ce TD nouvellement créé. Ou dois-je faire un retour dans le nouveau TD que j'ai créé à partir de l'objet cliqué original?

$("td.expandable a").click(function(){ 
    // figure out the number of columns we need to span 
    var colspan; 
    colspan = $(this).parents("tr").children("td").size(); 

    // insert the new TR 
    $(this).parents("tr").after("<tr><td colspan=' & colspan & '></td></tr>"); 

    // **what syntax would I use here to refer to the above made TD?** 

    return false; 
}); 

Répondre

1
$("td.expandable a").click(function(){ 
     // figure out the number of columns we need to span 
     var colspan = $(this).parents("tr").children("td").size(), 
      tr = $("<tr><td colspan=' & colspan & '></td></tr>"); 

     // insert the new TR 
     $(this).parents("tr").after(tr); 

     // **what syntax would I use here to refer to the above made TD?** 
     tr.find('td') 

     return false; 
}); 

Vous pouvez aussi probablement remplacer parents avec closest si vous mettez à jour un tr. . Une autre façon encore plus manuel aurait été faire ... $(this).parents('tr').next().find('td')

+0

Ne tr.indiquerait-il pas ('td') toutes les instances de ce TR nouvellement créé? Dans mon cas, nous pourrions en insérer plusieurs et ne souhaiterions correspondre qu'à celui que je viens de créer. Je peux mal comprendre les «parents». Est-ce que cela renvoie le TR parent ou tous les TR parent de l'objet en tant que tableau? Si ce dernier, je pense que j'ai besoin de plus proche à la place. –

+0

ah, en effet ... Je dois utiliser «plus proche» plutôt que «parents» comme je ne suis qu'un seul parent. De plus, en seconde lecture, je réalise maintenant que 'tr' n'est pas une chaîne, mais un objet jquery réel, de sorte que, en effet, correspondra à celui-ci. Merci meder! –

0

insertAfter() enveloppez() conviennent à ce genre de chose:

$('td.expandable a').click(function() { 
    var $parent = $(this).parents('tr'); 
    var colCount = $parent.children('td').size(); 
    var $td = $('<td colspan=' + colCount + '></td>'); 
    $td.insertAfter($parent).wrap('<tr></tr>'); 
    return false; 
}); 

je la chaîne opérateur concaténation « + » . "&" est utilisé pour les entiers pour calculer le nombre de bits AND.

Questions connexes