2012-05-19 1 views
2

Une question sur supérieure jQueryJquery trouver l'élément précédent avec la même classe dans dom

Je veux trouver un élément dom avec classe dit, abc, quand je clique sur un élément avec la même classe. Maintenant, la recherche devrait être exactement l'élément précédent.

code je l'ai écrit:

$(this) 
    .closest('.abc') 
    .parent() 
    .prevAll() 
    .find('.abc') 
    .first() 
    .triggerHandler("focus"); 

Ceci est à la recherche de retour dom et la recherche abc précédent du parent, mais si la doesnt classe « abc » existe dans dom précédent, je veux chercher jusqu'à ce qu'il trouve abc, Aussi essayé avec prevuntil de jquery toujours pas de chance.

Si quelqu'un peut m'aider, merci beaucoup.

+1

Il serait utile d'inclure votre code HTML pour voir votre arborescence DOM. – kapa

+0

dom tree est complexe et spécifique, je veux une solution générique. – abhijit

+0

Si la classe n'existe pas dans le DOM précédent, vous voulez continuer à chercher, mais où exactement voulez-vous chercher, un autre DOM? – adeneo

Répondre

5

Vous pouvez l'utiliser pour obtenir l'élément précédent:

var $current = $(this); //the element you have 
var $elems = $('.abc'); //the collection of elements 

var $previous = $elems.eq($elems.index($current) - 1); //the one you needed 

I woul Je ne dis pas que c'est le code le plus efficace possible, mais sans connaître l'arbre DOM, c'est le meilleur que je puisse trouver. Si vous réexécutez uniquement $('.abc') lorsque le DOM a pu être modifié et que vous utilisez uniquement la version mise en cache ($elems), cela devrait fonctionner correctement.

+0

Beaucoup plus agréable que ma boucle laide! +1 – bfavaretto

+0

c'est ce que je cherchais bu demande la même question que vous m'avez demandé si la classe ne le fait pas ?? Merci beaucoup pour votre temps, permettez-moi d'évaluer cela selon mes besoins et je vous tiendrai au courant et posterai ma réponse bientôt ou si cela fonctionne serait une réponse. Merci – abhijit

+0

@abhi Désolé, je ne comprends pas votre problème. – kapa

2

Voici un moyen rapide et sale:

$('.abc').click(function(){ 
    var clicked = this; 
    var last; 
    // Go though all elements with class 'abc' 
    $('.abc').each(function(){ 
     if(this == clicked) return false; 
     last = this; 
    }); 
    if(last) $(last).triggerHandler("focus"); 
}); 
+0

Oups, exemple mis à jour, il y avait un problème grave. Voir la version de travail ici: http://jsfiddle.net/TKZz8/ – bfavaretto

+0

très gentil merci pour la réponse, j'ai utilisé ce qui précède car c'est moins avec la boucle, +1. – abhijit

Questions connexes