2011-01-31 8 views
29

¿Cuál es el equivalente de jQuery para cada():jQuery - equivalente a cada uno(), pero por un solo elemento

$(".element").each(function(){ 
    // do stuff 
}); 

al colocar una función de un solo elemento, como #element?

+0

¿Hay alguna razón por la que el uso de cada uno no funcione? – Lance

+0

Realmente te estás metiendo en eso no? ¿Pero a qué te refieres exactamente? No creo entender la pregunta – jAndy

+3

funciona, pero se siente mal usarlo así :) – Alex

Respuesta

18

Siempre se puede hacer referencia al objeto jQuery en una variable:

var $el = $('#element'); 

... luego manipularla.

$el.doSomething();   // call some jQuery methods from the cached object 
$el.doSomethingElse(); 

Si la razón por la que quería era .each() para hacer referencia al elemento DOM como this, que realmente no necesita la palabra clave this hacerlo, sólo tiene que agarrar el elemento DOM fuera del objeto jQuery.

var element = $('#element')[0];  // both of these give you the DOM element 
var element = $('#element').get(0); //  at index 0 

Los dos de éstos son equivalentes, y recuperará el elemento DOM que se hace referencia como this en el .each().

alert(element.tagName); // alert the tagName property of the DOM element 
alert(element.id);  // alert the ID property of the DOM element 

me gustaría tener en cuenta que no es necesariamente malo para utilizar cada uno para repetir un solo elemento.

Las ventajas son que tiene fácil acceso al elemento DOM, y puede hacerlo en un nuevo alcance para no saturar el espacio de nombres circundante con variables.

También hay otras formas de lograr esto. Tome este ejemplo:

(function($) { 

    // Inside here, "this" will refer to the DOM element, 
    // and the "$" parameter, will reference the jQuery library. 

    alert(this.tagName); 

    // Any variables you create inside will not pollute the surrounding 
    //  namespace. 

    var someVariable = 'somevalue'; // is local to this function 

}).call($('#element')[0], jQuery); 
+2

'$ ('# element') [0]! = $ ('# Element'). Get (0)' El primero devuelve el elemento DOM, este último devuelve un objeto de mapa jQuery del elemento DOM. Puede llamar a '$ ('# element'). Get (0) .click (function ...);' mientras que '$ ('# element') [0] .click (function ...);' sería inválido. – zzzzBov

13

para responder directamente a su pregunta, .each() opera normalmente en los conjuntos de elementos de cualquier tamaño incluyendo 1.

También es posible omitir la llamada .each() completamente y simplemente llamar a los métodos de jQuery en $('#element'). Recuerde que puede encadenar la mayoría si no todas las llamadas al método jQuery a medida que devuelven el objeto jQuery. Esto incluso funciona en múltiples elementos para el asunto, dependiendo de lo que hagan los métodos.

$('#element').doSomething().doSomethingElse(); 

Si necesita hacer referencia al objeto varias veces, hacer que una variable:

var $elm = $('#element'); 
$elm.doSomething(); 
doSomethingElse($elm); 
2

Si sólo hay 1 elemento, se puede acceder a él normalmente utilizando el selector.

$('#your_element').your_event(function() { 

}); 
1

¿Quieres decir como $ ('# elemento'). (Niños). Each() suponiendo que tiene algo así como un ul con un id y desea que el li cada uno dentro de ella?

8

Use first().

each() coincide con todos los elementos, y first() coincide con la primera.

También hay otros selectores. Cuando usa la identificación en el selector, solo obtendrá un elemento. Esta es la principal diferencia entre .element y #element. La primera es una clase que se puede asignar a muchos elementos, mientras que la segunda es una identificación que pertenece solo (como máximo) a un elemento.

Aún puede usar cada uno si solo se devuelve un elemento (o 0). Además, puede omitir cada uno por completo si desea vincular un evento. Utiliza each cuando desea ejecutar una función específica para cada elemento en la lista de elementos.

+3

¡Gracias! Vine aquí buscando esto. Todas las otras respuestas parecen agregar innecesariamente la función en un método de extensión. – KyleMit

2

Detrás de las escenas, each es sólo un bucle for que recorre en iteración cada elemento en la map devueltos por jQuery.

Es esencialmente & dagger; lo mismo que:

var i, map = $('...selector...'); 
for (i = 0; i < map.length; i++) 
{ 
    someFunction(i, map[i]); 
} 

y daga; Hay más que esto, que implica llamar a la función en el contexto del elemento del mapa, etc.

Su implementación es para proporcionar una forma conveniente de llamar a una función en el elemento each en la selección.

+0

En realidad es 'someFunction.call (mapa [i], i, mapa [i])' o 'someFunction.apply (mapa [i], [i, mapa [i]])'. Solo para ser quisquilloso. – btleffler

+0

@btleffler, sí de ahí el "† Hay más que eso". La razón por la que no usé esas abstracciones particulares fue por razones de brevedad y legibilidad. – zzzzBov

+0

¡Ja! No sé cómo me perdí esa. Estuvo ahí todo el tiempo. Mis disculpas. – btleffler

Cuestiones relacionadas