2011-08-24 33 views
58

Estoy usando jQuery v1.6.1 en modo no conflictivo.jQuery ID Selector ("#id") Devuelve la matriz

Estoy usando selectores de id como $j("#divID").value para obtener los valores de los elementos almacenados.

Desafortunadamente, $j("#inputID") está devolviendo una lista de elementos, así que tengo que usar el $j("divID")[0].value para obtener el valor del objeto. El [0] parece innecesario, ya que, por definición, solo hay un elemento html con un ID determinado.

¿Es esta la forma adecuada de obtener valores de un objeto IDed? ¿O hay un mejor camino?

Gracias!

+0

¿Quiere decir que no sea '.val()'? – user113716

+1

Si '# divID' realmente se refiere a un' div', entonces 'value' o' .val() 'no funcionarán.Solo los elementos de formulario tienen una propiedad 'value'. –

+0

Buen punto, @Felix. He corregido la pregunta. – Richard

Respuesta

93

$j("#divID").val() funcionará bien.

Por el jQuery documentation, .val() devolverá el valor del primer elemento en el conjunto de elementos coincidentes.

Vale la pena entender conceptualmente cómo funciona jQuery para ver por qué funciona de esta manera. El resultado de cualquier consulta de selector es un objeto jQuery. Es ese objeto jQuery que contiene la miríada de métodos que ofrece jQuery. .val() es uno de esos métodos, como son cosas como .fadeIn(), .hide(), etc ... Esos métodos no son métodos en un objeto DOM, sino métodos de un objeto jQuery. Debido a que los objetos jQuery son de propósito general y pueden contener 0, 1 o más objetos DOM en su matriz interna, se obtiene el mismo objeto jQuery de una llamada al selector jQuery si los resultados tienen 0, 1 o más objetos DOM en él.

Por lo tanto, $j("#divID") que contiene solo un objeto devuelve el mismo tipo de objeto que $j(".rows") que puede contener cientos de objetos DOM. Esto simplifica enormemente la programación de jQuery porque no tiene que hacer las cosas de manera diferente dependiendo de cuántos objetos regresen de la consulta del selector.

Cuando se refiera a $j("divID")[0], está buscando en la matriz interna del objeto jQuery de objetos DOM (que se llenó en la consulta del selector) y buscando el primer objeto DOM en esa matriz. En ese punto, tiene un objeto DOM normal, no un objeto jQuery y puede usar métodos o atributos DOM normales en él. Ocasionalmente, esto es necesario (para obtener el objeto DOM real), pero generalmente es más fácil usar los métodos que jQuery proporciona en el objeto jQuery. Hay muchas ventajas al usarlos, como puede encadenar múltiples solicitudes a la mayoría de los métodos y repetirá automáticamente sobre todos los objetos DOM en su matriz interna.

Por ejemplo, usted llamó a esto: $j("rows-even").hide() y había 20 filas con esa clase, entonces todas ellas serían operadas por el método hide() sin más código que este. De usted podría encadenar varios métodos juntos de esta manera: $j("rows-even").slideUp().slideDown(). En este caso, está ejecutando una animación y jQuery encadena estas dos animaciones, iniciando automáticamente la segunda cuando termina la primera. Todo es bastante útil en muchas circunstancias y puede ahorrar una tonelada de código sobre lo que normalmente debería escribirse usando JS simple.

+0

¡Respuesta impresionante, gracias! – Richard

+0

+1 buena, respuesta completa. –

+0

+1 buena respuesta. – Usman

3

$j("#divID") devuelve un objeto jQuery. Para obtener el valor del elemento seleccionado, debe llamar al método val para obtener el valor.

Uso $j("#divID").val();

Cuestiones relacionadas