2011-09-05 17 views
33

Ho questo codice:Come selezionare solo un fratello con jQuery?

<ul> 
    <li class="foo">foo text</li> 
    <li class="foo2">foo2 text</li> 
    <!-- more li here --> 
    <li class="bar">bar text</li> 
    <li class="bar2">bar2 text</li> 
    <!-- more li here --> 
    <li class="baz">clickme!</li> 
</ul> 

e

$(".baz").click(function() { 
    alert("test: " + $(this).siblings(".bar")[0].text()); // Doesn't work 
}); 

siblings(".bar")[0] non funziona. (non viene visualizzata alcuna finestra di avviso e nessun errore javascript)

Qual è il modo corretto per selezionare solo un fratello?

jsFiddle try

Edit: Non voglio usare prev() o next().

+1

Avere una buona domanda distintivo. Questo è l'unico posto in cui posso trovare un esempio di come limitare i fratelli ad una particolare classe. – ouflak

+0

@ouflak Prego –

risposta

48

È possibile utilizzare il metodo eq per ridurre l'unico set di elementi da uno a un indice specifico:

$(this).siblings(".bar").eq(0).text() 

che selezionerà il primo elemento nel set . Nel tuo caso, si può semplicemente utilizzare prev, come l'elemento che stai cercando viene direttamente prima che l'elemento cliccato:

$(this).prev(".bar").text() 

Il problema con il metodo matrice notazione si stesse utilizzando è che restituisce il nodo DOM reale contenuto all'interno dell'oggetto jQuery e questo non avrà un metodo text. eq è il metodo jQuery equivalente per fare ciò.

+0

Grazie, stavo cercando 'eq()'. Btw, cosa significa? –

+2

@pinouchon: leggi la documentazione e scoprilo. James ti ha anche fornito il link in modo che tu non debba fare il grosso sforzo di inserire 'jQuery eq' su Google. –

+1

Ti sto chiedendo perché non l'ho trovato nel documento. –

2

Si potrebbe utilizzare successivo() o prev();

$(".baz").click(function() { 
    alert("test: " + $(this).prev(".bar").text()); 
}); 

violino qui http://jsfiddle.net/fMT5x/2/

10

È anche possibile afferrare il primo elemento di un oggetto jQuery utilizzando prima:

alert(siblings(".bar").first().text()); 
1

È possibile farlo:

$(".baz").click(function() { 
    alert("test: " + $(this).prev.html()); 
}); 

Ma, dovete essere sicuri che esista una voce precedente a .baz

o (meglio)

$(".baz").click(function() { 
    alert("test: " + $(this).siblings(".bar").eq(0).text()); 
}); 

OR (peggio), solo per riferimento, non utilizzarlo :)

$(".baz").click(function() { 
    var text = 0; 
    $(this).siblings(".bar").each(function(){ text = $(this).text(); break; }); 
    alert("test: " + text); 
}); 
Problemi correlati