jQuery ¿cómo encontrar un elemento basado en un valor de atributo de datos?

Resuelto Jannis asked hace 13 años • 9 respuestas

Tengo el siguiente escenario:

var el = 'li';

y hay 5 <li>en la página, cada uno con un data-slide=numberatributo (el número es 1,2,3,4,5 respectivamente) .

Ahora necesito encontrar el número de diapositiva actualmente activo que está asignado var current = $('ul').data(current);y actualizado en cada cambio de diapositiva.

Hasta ahora mis intentos no han tenido éxito, intentando construir el selector que coincida con la diapositiva actual:

$('ul').find(el+[data-slide=+current+]);

no coincide/devuelve nada...

La razón por la que no puedo codificar la liparte es que se trata de una variable accesible para el usuario que se puede cambiar a un elemento diferente si es necesario, por lo que es posible que no siempre sea un archivo li.

¿Alguna idea sobre lo que me estoy perdiendo?

Jannis avatar Nov 16 '10 12:11 Jannis
Aceptado

Tienes que inyectar el valor de currenten un selector Attribute Equals :

$("ul").find(`[data-slide='${current}']`)

Para entornos JavaScript más antiguos ( ES5 y anteriores):

$("ul").find("[data-slide='" + current + "']"); 
Frédéric Hamidi avatar Nov 16 '2010 06:11 Frédéric Hamidi

En caso de que no quieras escribir todo eso, aquí tienes una forma más breve de consultar por atributo de datos:

$("ul[data-slide='" + current +"']");

Para su información: http://james.padolsey.com/javascript/a-better-data-selector-for-jquery/

KevinDeus avatar Mar 03 '2012 23:03 KevinDeus

Al buscar con [data-x=...], cuidado, no funciona con jQuery.data(..) setter :

$('<b data-x="1">'  ).is('[data-x=1]') // this works
> true

$('<b>').data('x', 1).is('[data-x=1]') // this doesn't
> false

$('<b>').attr('data-x', 1).is('[data-x=1]') // this is the workaround
> true

Puedes usar esto en su lugar:

$.fn.filterByData = function(prop, val) {
    return this.filter(
        function() { return $(this).data(prop)==val; }
    );
}

$('<b>').data('x', 1).filterByData('x', 1).length
> 1
psycho brm avatar Mar 27 '2013 03:03 psycho brm