2010-11-02 13 views
26

Tengo una lista de tramos con clase particular "lugar" y algunos de ellos tienen la clase "activada". ¿Hay alguna manera de seleccionar el primer elemento con la clase "activada" y la última?Seleccione el primer y último elemento con clase particular usando jQuery

<span class="place" onclick="activate();">1</span> 
<span class="place" onclick="activate();">2</span> 
<span class="place activated" onclick="activate()">3</span> 
<span class="place activated" onclick="activate();">4</span> 
<span class="place activated" onclick="activate();">5</span> 
<span class="place activated" onclick="activate();">6</span> 
<span class="place" onclick="activate();">7</span> 

Respuesta

37
var firstspan = $('span.activated:first'), 
    lastspan = $('span.activated:last'); 

Por cierto, si estás usando jQuery, lo es con todos los eventos en línea clic?

Se podría añadir algo de código de este modo:

$('span.place').click(function() { 
    activate(); // you can add `this` as a parameter 
       // to activate if you need scope. 
}); 
+0

+1 para la respuesta más rápida correcta ;-) – netadictos

+1

Tengo muchos de esos intervalos y en cada uno de ellos hay esta función de activación con diferentes atributos, así que creo que es mejor así. Gracias por la excelente respuesta – tsusanka

0
var first = $('.activated:first'); 
var last = $('.activated:last'); 
13
var places = $('span.place.activated'); 

var first = places.first(), 
    last = places.last(); 

Explicación: El selector span.places.activated obtendrá todos <span> s con ambas clases de "activado" "lugar" y. Luego, los métodos first() y last() devolverán los elementos primero y último de ese conjunto. Esto es preferible al uso de los pseudoselectores :first y :last porque la selección es costosa y de esta manera solo hacemos selección una vez y luego dependemos de operaciones de matriz (baratas) para obtener los primeros y últimos elementos.

+0

+1 por no ejecutar el selector dos veces. – user113716

+0

+1 porque estoy de acuerdo con patrick. ¡Esta es probablemente la mejor respuesta! – Stephen

1

Si se ocupa del rendimiento, entonces mejor utilice $('span.place.activated') en lugar de $('.activated:first'). Pero, en este caso, la segunda variante también es correcta.

Cuestiones relacionadas