jQuery buscar elemento por valor de atributo de datos


103

Tengo algunos elementos como a continuación:

<a class="slide-link" href="#" data-slide="0">1</a>
<a class="slide-link" href="#" data-slide="1">2</a>
<a class="slide-link" href="#" data-slide="2">3</a>

¿Cómo puedo agregar una clase al elemento que tiene un data-slidevalor de atributo de 0(cero)?

He probado muchas soluciones diferentes pero nada funcionó. Un ejemplo:

$('.slide-link').find('[data-slide="0"]').addClass('active');

¿Alguna idea?


2
Para explicar un poco las cosas aquí, la razón por la que esto no funciona es porque está tratando de encontrar los descendientes de .slide-linkcon el atributo de [data-slide="0"]. Dado que algo no puede ser descendiente de sí mismo, no tiene nada que devolver. Sin embargo, si tuviera una envoltura alrededor de estos enlaces, entonces esto habría funcionado:$('.slide-link-wrapper').find('[data-slide="0"]').addClass('active');
DondeEstaMiCulo

Respuestas:


223

Usar selector de atributo igual

$('.slide-link[data-slide="0"]').addClass('active');

Fiddle Demo

.encontrar()

funciona en el árbol

Obtenga los descendientes de cada elemento en el conjunto actual de elementos coincidentes, filtrados por un selector, objeto jQuery o elemento.


2
Culpa mía. Lo había intentado pero en el lugar equivocado (antes de agregar mis elementos dinámicamente ...). De todos modos gracias por el esfuerzo! Funciona bien.
MrUpsidown

@MrUpsidown Bienvenido Feliz de ayudar :)
Tushar Gupta - curioustushar

1
¡Guauu! esta solución es genial! Tuve un problema durante horas, ¡pero esto lo solucionó!

¿cómo lo equiparo a un valor variable var slidernumber = "0";, en lugar de la constante "0"?
tony gil

Si por alguna razón no puede depender de que una determinada clase esté allí, puede usar un comodín para la primera parte como este $ ('* [data-slide = "0"]'). AddClass ('active') ;
SeanMC

59

También puede usar .filter ()

$('.slide-link').filter('[data-slide="0"]').addClass('active');

5

Busqué la misma solución con una variable en lugar de String.
Espero poder ayudar a alguien con mi solución :)

var numb = "3";
$(`#myid[data-tab-id=${numb}]`);

3

También puede usar el andSelf()método para obtener el contenedor DOM que contiene y luego find()puede funcionar como su idea

$(function() {
  $('.slide-link').andSelf().find('[data-slide="0"]').addClass('active');
})
.active {
  background: green;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<a class="slide-link" href="#" data-slide="0">1</a>
<a class="slide-link" href="#" data-slide="1">2</a>
<a class="slide-link" href="#" data-slide="2">3</a>

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.