2012-08-01 10 views
49

Ho una serie di righe con colonne e voglio selezionare il valore di un campo input che si trova in una colonna precedente al campo input (prezzo) a cui sto chiamando una funzione quando la chiave è rilasciata.Jquery trova l'elemento di corrispondenza più prossimo

ho provato:

quantity = $(this).parent().parent().children().val() ; 
quantity = $(this).parent().parent().children().closest('.inputQty', this).val() ; 

Ma né lavoro.

Un esempio del DOM:

<div class="row"> 
    <div class="column"><input class="inputQty" id="quantity0" /></div> 
    <div class="column"><input class="someOther" id="Other0" /></div> 
    <div class="column"> 
     <div class="cSelect"> 
      <select id="currency0"><option>£</option></select> 
      <input class="price" id="price0" /> 
     </div> 
    </div> 
</div> 

risposta

104
var otherInput = $(this).closest('.row').find('.inputQty'); 

che sale ad un livello di riga, poi di nuovo in.

+0

non c'è un altra funzione che cerca qualcosa sullo stesso livello dell'elemento in cui ti trovi attualmente? Devi sempre andare su e giù? – Majo0od

+0

Questa domanda non riguardava la ricerca di qualcosa sullo stesso livello - era necessario risalire poi indietro - ma sì, per lo stesso livello ci sono '.siblings()' e vari 'next ~()' e 'prev ~() 'metodi. – Utkanos

+2

grazie, stavo cercando una soluzione del genere e ha funzionato per me! ma la cosa più importante è imparare di più sulla funzione più vicina(). Grazie mille! Davide, –

1

Prendi il .column genitore dell'elemento this, ottiene il suo fratello precedente, quindi trovare qualsiasi ingresso c'è:

$(this).closest(".column").prev().find("input:first").val(); 

Demo: http://jsfiddle.net/aWhtP/

0

Si potrebbe provare:

$(this).closest(".column").prev().find(".inputQty").val();

10

closest() guarda solo per i genitori, sto cercando di indovinare che cosa si vuole veramente è .find()

$(this).closest('.row').children('.column').find('.inputQty').val();