2010-02-22 59 views
16

Necesito tomar el valor de texto de un div infantil.jQuery obtener valor dentro de div infantil

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

estoy tratando de agarrar el valor B. Actualmente estoy tratando de esto, pero no está trabajando,

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

Respuesta

26

que desea utilizar children() y text() en lugar de val(). Aunque, dado que lo que está seleccionando tiene una identificación (y los identificadores deben ser únicos), también puede simplemente seleccionar en base a la identificación sin involucrar el elemento contenedor en absoluto.

El método val() solo funciona en elementos de entrada, áreas de texto, y selecciona básicamente todos los elementos de formulario que contienen datos. Para obtener el contenido textual de un contenedor, debe usar text() (o html(), si también desea el marcado).

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

o

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

Los documentos de JQuery indican que nextAll atraviesa a los hermanos, no a los niños. –

+0

@John - tienes toda la razón. No leí el HTML y no consulté lo suficiente. He actualizado para indicar que 'children()' es necesario en lugar de 'next()' - aunque ambos son innecesarios ya que el selector basado en id es mejor de todos modos. – tvanfosson

0

........

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

Los documentos de JQuery indican que nextAll atraviesa hermanos, no niños. –

4

probar este ...

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

simple,

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

O su cambio,

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

Esto devolverá "B" de div de Identificación "second_child"

ACTUALIZACIÓN cambiado la segunda solución a children() en lugar de nextAll().

+0

Los documentos de JQuery indican que nextAll atraviesa hermanos, no niños. –

+0

Sweet, gracias por señalar esto, cambiaré a 'children()' en su lugar. –

6

next() y nextAll() recorren hermanos del elemento, no los elementos secundarios. En su lugar, use "find()"

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

Utiliza val() cuando se trata de elementos como inputs y textareas. html() devolverá lo que está debajo del div (que funciona en su ejemplo). text() devolverá el texto en el elemento (que también funcionaría en su ejemplo).

Su ejemplo también me hace sospechar de su diseño. Si tiene varios identificadores configurados en "#second_child", su html se confunde. En cambio, usa una clase. Sin embargo, si sólo hay un id "#second_child", entonces todo lo que necesita es:

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

puede simplemente:

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

como se ha indicado por las respuestas anteriores. pero, dado que "necesitas tomar el valor de texto de un div infantil", supongo que el id. de div. hijo probablemente no esté siempre disponible.puede probar esto en su lugar:

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

donde 1 es el índice de la div niño (ya que cuenta empieza desde cero)

1

Para múltiples elementos con el mismo id:

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

Para un solo elemento con un ID en particular:

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

Si tiene que ir en listas, utilice la siguiente:

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

Ejemplo código obtiene el valor del sexto elemento de una lista.

Cuestiones relacionadas