2010-02-22 32 views
16

Ho bisogno di prendere il valore di testo di un div figlio.jQuery ottiene valore nel div child

<div id='first'> 
    <div id='first_child'>A</div> 
    <div id='second_child'>B</div> 
    <div id='third_child'>C</div> 
</div> 

sto cercando di afferrare il valore di B. Attualmente sto cercando questo, ma non funziona,

var text_val = $('#first').next('#second_child').val(); 

risposta

26

si desidera utilizzare children() e text() invece di val(). Sebbene, dal momento che ciò che si sta selezionando abbia un id (e gli id ​​devono essere univoci), si può anche semplicemente selezionare in base all'id senza coinvolgere l'elemento contenitore.

Il metodo val() funziona solo sugli elementi di input, sulle aree di testo e seleziona, in pratica tutti gli elementi di modulo che contengono dati. Per ottenere il contenuto testuale di un contenitore, è necessario utilizzare text() (o html(), se si desidera anche il markup).

var text_val = $('#second_child').text(); //preferred 

o

var text_val = $('#first').children('#second_child').text(); // yours, corrected 
+0

I documenti JQuery indicano che nextAll attraversa i fratelli, non i bambini. –

+0

@ John - hai assolutamente ragione. Non ho letto l'HTML e ho interrogato abbastanza da vicino. Ho aggiornato per indicare che 'children()' è necessario invece di 'next()' - sebbene entrambi non siano necessari poiché il selettore basato su id è comunque migliore. – tvanfosson

0

........

var text_val = $('#first').children('#second_child').text(); 
+0

I documenti JQuery indicano che nextAll attraversa i fratelli, non i bambini. –

4

Prova questa ...

var text_val = $('#first > #second_child').text(); 
4

Semplice,

var text_val = $('#second_child').text(); 

O il vostro cambiamento,

var text_val = $('#first').children('#second_child').text(); 

Ciò restituirà "B" dal div id di "second_child"

UPDATE cambiato la seconda soluzione al children() invece di nextAll().

+0

I documenti JQuery indicano che nextAll attraversa i fratelli, non i bambini. –

+0

Dolce, grazie per averlo indicato, passerò invece a 'children()'. –

6

next() e nextAll() attraversano i fratelli dell'elemento, non i bambini. Utilizzare invece "find()"

var text_val = $('#first').find('#second_child').html(); 

Si utilizza val() quando si trattano elementi come input e textareas. html() restituirà tutto ciò che è sotto il div (che funziona nel tuo esempio). text() restituirà il testo nell'elemento (che funzionerebbe anche nel tuo esempio).

Il tuo esempio mi fa anche sospettare del tuo design. Se hai più ID impostati su "#second_child", il tuo html è confuso. Invece, usa una classe. Tuttavia, se c'è solo un id "#second_child", quindi tutto ciò che serve è:

var text_val = $('#second_child').text(); 
5

si può semplicemente:

var text_val = $('#second_child').text(); 

come sottolineato dalle risposte precedenti. ma, poiché "hai bisogno di afferrare il valore del testo di un div figlio", presumo che l'id div figlio probabilmente non sia sempre disponibile.si può provare questo invece:

var text_val = $('#first').children().eq(1).text(); 

dove 1 è l'indice del div bambino (in quanto conteggio inizia da zero)

1

per più elementi con lo stesso ID:

var text_val = $('#first').children('#second_child').text(); 

Per un unico elemento con una particolare ID:

var text_val = $('#second_child').text(); 
0

Se avete bisogno di andare in elenchi, utilizzare questo:

jQuery('.first > ul > li:nth-child(6)').text();

codice di esempio ottiene il valore del 6 ° elemento in un elenco.

Problemi correlati