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.