2009-08-09 9 views
5

Je dois obtenir la div contenant l'adresse dans la liste. Le div a une classe appelée address (div class = "address")Comment obtenir un élément spécifique dans la boucle jQuery.each

Je ne peux pas utiliser jQuery ("# ​​storeList li .address"), car il y a d'autres éléments dont j'ai besoin.

J'ai le code suivant:

jQuery("#storeList li").each(function() { 
    var n = jQuery(this.address).text(); // <- This does not work 
    alert(n); 
}); 

Comment accéder à chaque élément DIV de type Adresse?

Répondre

12
jQuery("#storeList li").each(function() { 
    var n = jQuery(this).find(".address").text(); // <- This works 
    alert(n); 
}); 
+0

mieux préfixe les sélecteurs avec le nom du nœud aussi - jQuery (this) .Find ("div.address") – redsquare

+0

Cela dépend. Si vous préfixez le sélecteur avec le nom du noeud, vous ne pouvez pas modifier la structure des éléments (par exemple, remplacer un élément div par un intervalle) sans avoir à modifier le code javascript. D'un autre côté, jQuery peut sélectionner l'élément plus rapidement si vous utilisez des sélecteurs de nœuds. – Scharrels

+0

Oui, les sélecteurs de noeud sélectionneront un élément plus rapidement. Inversement avec CSS si vous faites votre sélecteur trop spécifique, cela ralentit le processus de sélection. –

-1
jQuery("#storeList li:has(.address) .address").each(function() { 
    alert(this.innerHTML); 
}); 

Une autre solution qui évite l'utilisation d'une seconde requête. En tant que novice jQuery je ne sais pas ce que les compromis sont vraiment.

+0

C'est bien si vous ne vous souciez que de l'adresse, mais pas si vous avez plus de champs, ou quoi gérer sans adresses. De plus, vous n'avez pas besoin de 'li: has (.address) .address', c'est pareil mais plus lent que '.address' - vous sélectionnez le' .address', vous savez donc qu'il est là. – Kobi

+0

Très encourageant, Kobi. –

+0

Est-ce cynique? J'essaie juste d'aider ... Je n'ai pas voté, d'ailleurs, même si c'est compréhensible. – Kobi

2
$('#storeList li').each(function() 
{ 
    var n = $(this).find('div.address').html(); 
    alert(n); 
}); 
Questions connexes