jQuery ¿cómo encontrar un elemento basado en un valor de atributo de datos?
Tengo el siguiente escenario:
var el = 'li';
y hay 5 <li>
en la página, cada uno con un data-slide=number
atributo (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 li
parte 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?
Tienes que inyectar el valor de current
en un selector Attribute Equals :
$("ul").find(`[data-slide='${current}']`)
Para entornos JavaScript más antiguos ( ES5 y anteriores):
$("ul").find("[data-slide='" + current + "']");
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/
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