2012-03-14 16 views
8

quiero usar el código HTML data-* atributos y tienen algunas imágenes como esta:jQuery seleccione clase con valor

<img src="http://placehold.it/100.png" data-selected="true"> 
<img src="http://placehold.it/100.png" data-selected="false"> 
<img src="http://placehold.it/100.png" data-selected="false"> 
<img src="http://placehold.it/100.png" data-selected="true"> 
<img src="http://placehold.it/100.png" data-selected="false"> 

cómo puedo ahora sólo consigue solamente los que tienen data-selected="true"?

me trataron:

$("img").each(function(){ 
    if($(this)).attr("data-selected") == "true") { 
    //do something 
    } 
} 

pero esto no parece ser la mejor manera para mí. ¿Hay un selector directo donde puedo hacer algo como

$("img data-selected=true") ? 

gracias por su ayuda !!

+1

Tenga en cuenta que jQuery tiene ** excellent ** [documentation] (http://api.jquery.com/category/selectors/) – ManseUK

Respuesta

10

$("img[data-selected='true']") pero la cotización de valor no es obligatoria.

PD: se llama CSS attribute selector.

+0

Se llama [attribute equals selector] (http: //api.jquery. com/attribute-equal-selector /) – ManseUK

3

Prueba el siguiente selector

$('img[data-selected="true"]') 
7

Bien para una cosa que debe utilizar .data(...)

$("img").each(function(){ 
    if($(this)).data("selected") == "true") { 
    //do something 
    } 
} 

O puede utilizar:

$("img[data-selected='true']").something... 
+0

+1 para el puntero a '.data()' im escribiendo para siempre "use' .data() 'en lugar de' .attr() '" aquí! – ManseUK

+0

¡oh, no pensé en .data() lo haría! – Bfar221

4

Usted puede usar selector de atributos

$("img[data-selected='true']"); 

Otra alternativa es filter()

$("img").filter(function(){ return $(this).data("selected") == "true" }); 

Tenga en cuenta que a los atributos de los datos de acceso que puede utilizar data() método y sólo tiene que pasar la segunda mitad del nombre del atributo de datos.

+1

Ahhh '.filter()'!¡Estaba tratando de recordar el nombre de esa función! '+ 1' :-) – Neal

+0

genial tantas posibilidades !! Lo intentaré también aunque el primero sea más corto :) – Bfar221

3

Puede utilizar

$("img[data-selected='true']") 

hay mucha más selectores que sólo etiquetas y clases. Ver here on w3.org

+0

¡gracias por el enlace! – Bfar221

2

Ésta es una manera de hacer esto sin usar jQuery:

var imgs = document.getElementsByTagName('img'); 

imgs.​​​​​map(function (img) { 
    if (img.attributes["data-selected"].value == "true") { 
     // do something 
    } 
});​ 

Y no es necesario jQuery!

+1

jQuery aquí '$ ('img')' :) – ShankarSangoli

+1

sí; pero aquí viene la versión nativa: 'document.getElementsByTagName ('img')' :) Y no más jQuery –

+0

En ese caso es mejor si modificas tu respuesta con un enfoque alternativo sin usar 'Javascript'. – ShankarSangoli

Cuestiones relacionadas