2008-11-21 17 views
24

que tienen una estructura de tabla que se parece a:¿Cómo selecciono un solo elemento en jQuery?

<table> 
<tr id="row1"> 
    <td> 
    <div>row 1 content1</div> 
    </td> 
    <td> 
    <div>row 1 content2</div> 
    </td> 
    <td> 
    <div>row 1 content3</div> 
    </td> 
</tr> 
<tr id="row2"> 
    <td> 
    <div>row 2 content1</div> 
    </td> 
    <td> 
    <div>row 2 content2</div> 
    </td> 
    <td> 
    <div>row 2 content3</div> 
    </td> 
</tr> 
<tr id="row3"> 
    <td> 
    <div>row 3 content1</div> 
    </td> 
    <td> 
    <div>row 3 content2</div> 
    </td> 
    <td> 
    <div>row 3 content3</div> 
    </td> 
</tr> 
</table> 

Usando jQuery Estoy tratando de seleccionar el DIV en la segunda celda de la tercera fila. He intentado lo siguiente (entre otras cosas):

var d = $('#row3').children(':eq(1)').children(':eq(0)'); 

Lo que se obtiene es una matriz con un solo elemento (DIV que busco) y tengo que luego de acceso que utilicen d [0]. ¿Por qué jQuery devuelve una única matriz de elementos, pensé que usar el selector anterior devolvería el elemento DIV directamente?


@Shog9 - Duh ... Ok simplemente una luz encendido en mi cerebro, lo entiendo ahora. Aclamaciones.

Respuesta

23

jQuery siempre devuelve un conjunto de elementos. A veces, el conjunto está vacío. A veces, contiene solo un elemento. La belleza de esto es que se puede escribir código para que funcione de la misma manera, independientemente de cuántos elementos están emparejados:

$("selector").each(function() 
{ 
    this.style.backgroundColor = "red"; 
}); 

Fun!

8

Si encuentra que sabe que solo tratará con un solo elemento y que solo se devolverá un elemento, siempre puede seleccionar el índice cero de la matriz.

$("selector")[0].value 

Está sucio y rompe la convención de jQuery en general ... pero usted "podría" hacer esto.

+0

Obtengo "TypeError: $ (...) [0] .html no es una función" mientras que .first() funciona bien. –

+0

Simplemente seleccionando el índice [0] de la matriz devolverá un elemento DOM pero no un objeto jQuery, por lo que no podrá usar métodos jQuery como .html() en él. – abd3721

24

Si prefiere mantener un objeto jQuery, puede escribir en su lugar:

$("selector").first().val() 
+1

Esto devolverá una matriz que contiene un solo elemento. No puede disparar eventos 'click' en él. La solución CodeNinja anterior devuelve un solo elemento que no está dentro de una matriz. –

+0

jQuery siempre funciona con objetos tipo array. Cualquier acción posterior se refiere a todos los elementos. Entonces todas esas expresiones producirán el mismo resultado: '$ (" selector: first "). Click()', '$ (" selector "). First(). Click()', '$ ($ (" selector ") [0])., Haga clic en()'. Ver la respuesta de Shog9. – vcarel

0

Para obtener div directamente, probar este

$divElement = $('#row3 td div');

0

Hay varias opciones para hacer esto:

", seleccione el primero de varios elementos Div en el siguiente fragmento y cambiar su color a rosa"

<div>Div 1</div> <div class="highlight">Div 2</div> <div id="third">Div 3</div> <div class="highlight">Div 4</div>

Aquí podemos seleccionar la primera División de la siguiente manera:

1) $("div").first().css("color","pink");
2) $("div:first").css("color","pink");
3) $("div:first-of-type").css("color","pink");

Tenga en cuenta que 2 es una construcción jQuery y no una construcción css nativa y, por lo tanto, puede ser un rendimiento ligeramente menor.

Cuestiones relacionadas