2011-10-31 16 views
13

Sto cercando di ottenere il contenuto di un intervallo quando si fa clic su un pulsante. Questo è il codice html:JQuery ottiene il contenuto dell'intervallo

<div class="multiple-result"> 
<button class="select-location" id="168">Select</button> 
<span>Athens, Greece</span> 
</div> 

<div class="multiple-result"> 
<button class="select-location" id="102">Select</button> 
<span>Athens, Georgia, USA</span> 
</div> 

Sto cercando di farlo in modo che quando viene cliccato il pulsante che otterrà il valore della campata. Questo è quello che sto usando:

$('button.select-location').live('click', function(event){ 

    // set the span value 
    var span_val = $(this).parent("span").html(); 

    alert('selecting...' + span_val); 

}); 

Ma l'allarme è sempre mostrando: selezione ... nulla

risposta

39

si desidera ottenere il genitore prima, poi trovare l'arco:

var span_val = $(this).parent().find("> span").html(); 

Edit:Ever go back and look at code you wrote 2 years ago e gemere: "Perché l'ho fatto che? ". Il codice precedente è imbarazzante. Invece di .find("> span"), avrei dovuto usare .children("span").

var span_val = $(this).parent().children("span").html(); 

Ma, che cos'è un figlio di tuo padre? Un fratello! Quindi, invece di .parent().children("span"), avrei dovuto usare .siblings("span").

var span_val = $(this).siblings("span").html(); 

Ma, guardando il codice HTML, non abbiamo nemmeno bisogno di scavare attraverso i fratelli, sappiamo che è il fratello successivo:

var span_val = $(this).next("span").html(); 

o semplicemente:

var span_val = $(this).next().html(); 

A questo punto, stiamo usando a malapena jQuery. Noi potremmo solo dire:

var span_val = this.nextSibling.innerHTML; 

Ma, forse ora ho oscillato troppo lontano l'altro modo?

+0

Grazie, ha funzionato. – Frank

+3

Amo questa risposta. Questo è praticamente il modo in cui il mio monologo interiore suona ogni giorno. Questo merita più di 6 upvotes! – WheretheresaWill

+0

votato per "Torna indietro e guarda il codice che hai scritto 2 anni fa e geme" Perché l'ho fatto? " –

1

Non è genitore del pulsante. div è padre di button e span è figlio di div. Prova

var span_val = $(this).parent().children("span").html(); 

invece.

Working demo

1
$('button.select-location').live('click', function(event){ 

    var span_val = $(this).next("span").html(); 

    alert('selecting...' + span_val); 

}); 
+1

Perché down-voto sulla soluzione corretta? – Emil

1

Lo span non è un genitore del pulsante ".seleziona", ma il div è (in cui si trova lo span). Utilizzando il markup, provare qualcosa di simile:

var spanVal = $(this).parent('.multiple-result').find('span').html(); 
1

Ecco una demo Jsfiddler utilizzando jQuery next

http://jsfiddle.net/vVK54/1/

$('button.select-location').live('click', function(event){  
    // set the span value 
    var span_val = $(this).next().html(); 
    alert('selecting...' + span_val); 
}); 
0

A seconda di quanti si estende che hai, ma se la durata sarà sempre venire direttamente dopo il pulsante, funzionerà lo .next('span').Se prevedi di posizionare il pulsante in qualsiasi altro posto all'interno della stessa div genitore, dovrai spostarti nella dom per trovarlo.

$('selector').click(function() { 
    $(this).parent().find('span'); 
)}; 

Inoltre può essere meglio per aggiungere una classe targeting o attributo a campata di indirizzare meglio in caso si ha intenzione di un DOM più complesso o più campate.

<span class='clicktarget'>Text Here</span> 

$('button.select-location').click(function() { 
    var span_val = $(this).parent('div').find('span.clicktarget').html(); 
}); 

Spero che questo aiuti

Problemi correlati