2009-08-09 15 views
5

Potrzebuję uzyskać element div zawierający adres ulicy z listy. Element div ma klasę o nazwie address (div class = "address")Jak uzyskać określony element w pętli jQuery.each?

Nie mogę używać jQuery ("# ​​storeList li .address"), ponieważ są jeszcze inne elementy, których potrzebuję, aby uzyskać dostęp.

Mam następujący kod:

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

Jak mogę uzyskać dostęp do każdego elementu div typu adres?

Odpowiedz

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

lepiej poprzedzić selektorów z nazwą węzła także - jQuery (this) .find ("div.address") – redsquare

+0

To zależy. Jeśli prefiks zostanie ustawiony za pomocą nazwy węzła, nie można zmienić struktury elementów (na przykład zastąpić div przez span) bez konieczności zmiany kodu javascript. Z drugiej strony, jQuery może wybrać element szybciej, jeśli używasz selektorów węzłów. – Scharrels

+0

Tak, selektory węzłów szybciej wybierze element. W przeciwieństwie do CSS, jeśli selektor jest zbyt szczegółowy, spowalnia proces selektora. –

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

Alternatywą że unika się stosowania drugiego zapytania. Jako początkujący użytkownik jQuery nie wiem, jakie są naprawdę kompromisy.

+0

To miło, jeśli zależy ci tylko na adresie, ale nie, jeśli masz więcej pól lub jak obsługiwać li bez adresów. Ponadto, nie potrzebujesz 'li: has (.address) .address', jest taki sam, ale wolniejszy niż' li .address' - wybierasz ".address", więc wiesz, że tam jest. – Kobi

+0

Bardzo zachęcający, Kobi. –

+0

Czy to jest cyniczne? Po prostu staram się pomóc ... Nie głosowałem, przy okazji, choć to zrozumiałe. – Kobi

2
$('#storeList li').each(function() 
{ 
    var n = $(this).find('div.address').html(); 
    alert(n); 
}); 
Powiązane problemy