Consigue un segundo hijo usando jQuery


188
$(t).html()

devoluciones

<td>test1</td><td>test2</td>

Quiero recuperar el segundo tddel $(t)objeto. Busqué una solución pero nada me funcionó. ¿Alguna idea de cómo obtener el segundo elemento?

Respuestas:


350

agarra al segundo niño:

$(t).children().eq(1);

o agarra al segundo hijo <td>:

$(t).children('td').eq(1);

2
¿Cuál es la diferencia entre $(t).children('td').eq(1)y$(t).children()[1]
Green Lei

66
@GreenLei, para empezar, el primero devuelve un objeto jQuery, el segundo devuelve un objeto Node
anthonygore

2
¿Esto también funciona para el find()método jQuery? Como $(t).find('td').eq(1)para obtener el segundo <td>, si tera, por ejemplo, una tabla y necesitaba mirar hacia abajo más de 1 nodo.
Justin L.

No pude llegar .children('td').eq(1)a trabajar por alguna razón, pero .find('td').eq(1)funcionó bien.
SharpC

27

Aquí hay una solución que quizás sea más clara de leer en el código:

Para obtener el segundo hijo de una lista desordenada:

   $('ul:first-child').next()

Y un ejemplo más elaborado: este código obtiene el texto del atributo 'title' del segundo elemento secundario de la UL identificado como 'my_list':

   $('ul#my_list:first-child').next().attr("title")

En este segundo ejemplo, puede deshacerse de la 'ul' al comienzo del selector, ya que es redundante, porque una ID debe ser exclusiva de una sola página. Está ahí solo para agregar claridad al ejemplo.

Nota sobre rendimiento y memoria , estos dos ejemplos son buenos resultados, porque no hacen que jquery guarde una lista de elementos ul que tuvieron que ser filtrados después.


Si bien nos preocupamos por el rendimiento, sigamos adelante y mantengamos una referencia para ulque no tengamos que buscarlo.
daniel1426

22

Cómo es esto:

$(t).first().next()

ACTUALIZACIÓN PRINCIPAL:

Además de lo hermosa que se ve la respuesta, también debe pensar en el rendimiento del código. Por lo tanto, también es relevante saber qué hay exactamente en la $(t)variable. ¿Es una matriz de <TD>o es un <TR>nodo con varios <TD>sdentro? Para ilustrar mejor el punto, vea los puntajes de jsPerf en una <ul>lista con 50 <li>hijos:

http://jsperf.com/second-child-selector

El $(t).first().next()método es el más rápido aquí, con diferencia.

Pero, por otro lado, si toma el <tr>nodo y encuentra a los <td>niños y ejecuta la misma prueba, los resultados no serán los mismos.

Espero eso ayude. :)



9

Prueba esto:

$("td:eq(1)", $(t))

o

$("td", $(t)).eq(1)

8

Además de usar los métodos jQuery, puede usar la cellscolección nativa que <tr>le proporciona.

$(t)[0].cells[1].innerHTML

Suponiendo que tes un elemento DOM, puede omitir la creación del objeto jQuery.

t.cells[1].innerHTML

3

Es sorprendente ver que nadie mencionó la forma nativa de JS de hacer esto ...

Sin jQuery:

Simplemente acceda a la childrenpropiedad del elemento padre. Devolverá una colección HTMLC en vivo de elementos secundarios a los que se puede acceder mediante un índice. Si quieres tener el segundo hijo:

parentElement.children[1];

En su caso, algo como esto podría funcionar: (ejemplo)

var secondChild = document.querySelector('.parent').children[1];

console.log(secondChild); // <td>element two</td>
<table>
    <tr class="parent">
        <td>element one</td>
        <td>element two</td>
    </tr>
</table>

También puede usar una combinación de selectores CSS3 / querySelector()y utilizar :nth-of-type(). Este método puede funcionar mejor en algunos casos, porque también puede especificar el tipo de elemento, en este caso td:nth-of-type(2) (ejemplo)

var secondChild = document.querySelector('.parent > td:nth-of-type(2)');

console.log(secondChild); // <td>element two</td>

1

Utilizar el .find()método

$(t).find("td:eq(1)");

td:eq(x) // x is index of child you want to retrieve. eq(1) means equal to 1. //1 denote second element


<table> <tr class = "parent"> <td> elemento uno </td> <td> elemento dos </td> </tr> </table>

Si la información en su comentario es relevante para su respuesta, agregue los detalles a su publicación a través de Editar. De cualquier manera, borre su comentario.
mickmackusa

1

Puede usar dos métodos en jQuery como se indica a continuación:

Usando jQuery: nth-child Selector Ha puesto la posición de un elemento como argumento, que es 2, ya que desea seleccionar el segundo elemento li.

$( "ul li:nth-child(2)" ).click(function(){
  //do something
});

Usando jQuery: eq () Selector

Si desea obtener el elemento exacto, debe especificar el valor de índice del elemento. Un elemento de lista comienza con un índice 0. Para seleccionar el segundo elemento de li, debe usar 2 como argumento.

$( "ul li:eq(1)" ).click(function(){
  //do something
});

Ver Ejemplo: Obtener el segundo elemento secundario de la lista en jQuery

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.