2013-07-18 15 views
11

Chcę iterować wynik selektora kwerendy.Jak iterować wynik selektora jquery

kod HTML

<nav id="navigation"> 
     <a href="#" tabindex="1" class="active_nav">nav1</a> 
     <a href="#" tabindex="2">nav2</a> 
     <a href="#"tabindex="3">nav3</a> 
</nav> 

kiedy używać javascript

alert($("#navigation >a")[0]); 

wynik jest znacznik a href atrybut nie wiem dlaczego.

+1

co wyjście chcesz? –

+0

Możesz użyć '.each' http://api.jquery.com/each/ –

+0

@bohan sprawdź moją odpowiedź;) – EpokK

Odpowiedz

14

Zastosowanie $.each

$("#navigation > a").each(function() { 

    console.log(this.href) 
}); 

$('#navigation > a')[0] 
    ^   ^---- Selects the 1st dom object from the jQuery object 
     |     that is nothing but the index of the element among 
     |     the list of elements 
     |------- Gives you children of nav(3 anchor tags in this case) which is a 
       jQuery object that contains the list of matched elements 
+0

dlaczego '$ (" # navigation> a ") [0];' zwraca href atrybut pierwszego znacznika, a nie pierwszy obiekt DOM – bohan

0

Spróbuj użyć

console.log($("#navigation >a")) 

zamiast, więc można zobaczyć wszystkie wyniki w konsoli (CMD + Alt + I w chromie)

1

W jQuery, gdy używasz indeks taki jak [0], oznacza to, że uzyskujesz dostęp do elementu DOM. Z tego powodu

$("#navigation >a")[0] 

zwraca znacznik .

Aby iteracyjne wynik selektor jQuery użyć każdy

$("#navigation >a").each(function(index, elem){ 
}); 
1

Można użyć jQuery wbudowanej each() dla tej iteracji jak ten:

$("#navigation>a").each(function(index){ 
    console.log("I am " + index + "th element."); 
    //and you can access this element by $(this) 
}); 
1

Jeśli chcesz iteracyjne wszystkie <a> tagi, możesz użyć każdej z funkcji: i jeśli chcesz, możesz użyć każdej z nich. chcesz tylko dostać pierwszą <a> tag następnie użyć .eq()

alert($('#navigation >a').eq(0).attr('href'); 
+1

Dla pierwszego '' istnieje prostszy sposób: '$ ('# navigation> a: first')' –

+0

, ale chcę wiedzieć, dlaczego '$ (" # navigation> a ") [0];" zwraca atrybut href pierwszego tagu ... – bohan

+1

$ ("# navigation> a") [0] zwraca element DOM. Nie używaj funkcji alert(), aby zobaczyć, co zwraca, ponieważ wyświetla tylko atrybut href. Spróbuj użyć elementu inspect w Chrome lub użyj firebug na firefox. –

3

Korzystając first() tak:

var element = $("#navigation>a").first(); 
console.log(element); 

Reference

+0

ale chcę iterować cały zestaw nie tylko pierwszego. i chcę wiedzieć, dlaczego '$ (" # navigation> a ") [0];' zwraca atrybut href pierwszego tagu. – bohan

+1

Twoje zapytanie: "Chcę uzyskać pierwszy obiekt DOM, ale nie atrybut pierwszego obiektu" – EpokK

Powiązane problemy