2013-07-02 4 views
2

Je:jQuery insertAfter dernier élément

<div class="main"> 
    <a class="blah">blah1</a> 
</div> 
<div class="main"> 
    <a class="blah">blah2</a> 
</div> 
<div class="main reply"> 
    <a class="blah">blah3</a> 
</div> 
<div class="main reply"> 
    <a class="blah">blah4</a> 
</div> 
<div class="main reply"> 
    <a class="blah">blah5</a> 
</div> 
<div class="main"> 
    <a class="blah">blah6</a> 
</div> 
<div class="main reply"> 
    <a class="blah">blah7</a> 
</div> 

sur clic de a.blah, je dois ajouter quelque chose comme <div class="new">xxx</div> au dernier .reply après que le parent.main, cela signifie qu'il doit trouver la dernière .reply agter la mère du a.blah, et il ne devrait pas traverser à un autre .main, voici ce que je codé (mais ne fonctionne pas):

$('.blah').on('click', function(){ 
    var new_add = '<div class="new">xxx</div>'; 
    $(this).parents('div.main').next('.main:last').append(new_add); 
}); 

Comment dois-je résoudre ce problème? Merci

+3

Les ID doivent être uniques. Utilisez des classes pour les choses répétées. – Barmar

+0

Il n'y a pas de 'class =" reply_comment "' dans votre code HTML. – Barmar

+0

@Barmar il est classe dans mon code réel, ici je l'ai fait simple et oublié à ce sujet, et j'ai corrigé le '.reply_comment', c'est' .main' – behz4d

Répondre

2

Sur la base des commentaires

$('.blah').on('click', function(){ 
    var new_add = '<div class="new">xxx</div>'; 
    $(this).closest('.main').nextUntil('.main:not(.reply)').addBack().last().after(new_add); 
}); 

Démo: Fiddle

  1. .closest() trouver l'ancêtre immédiat correspondant au sélecteur
  2. .nextUntil() trouve tous les .reply éléments qui viennent après la .main actuelle sans franchir une .main sans .reply
  3. .addBack() recrédite le parent actuel, Incase la prochaine .main n'est pas .reply
  4. .last() trouve le dernier élément du appariées
  5. .after() insère l'élément passé après l'ensemble correspondant de l'élément
0
$('.blah').on('click', function(){ 
    var new_add = '<div class="new">xxx</div>'; 
    $(this).parents('div.main').siblings('.main:last').append(new_add); 
}); 

FIDDLE

+0

Ne serait-ce pas aussi ajouter à un commentaire? – casraf

+0

Oui, ce serait le cas. Votre question ne mentionne rien à ce sujet. – Barmar

+0

ceci va au dernier .main et l'ajoute là, ceci devrait être avant l'autre main et après '$ (ceci) .parent ('. Main'). Last (.reply)' – behz4d