Foros del Web » Programando para Internet » Jquery »

[SOLUCIONADO] Encontrar elemento con una clase y quitarselo

Estas en el tema de Encontrar elemento con una clase y quitarselo en el foro de Jquery en Foros del Web. Buenas tardes! ¿Cómo podría encontrar un elemento del menú con determinada clase y quitarsela? Veréis, mi menú consta de: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código HTML: Ver original ...
  #1 (permalink)  
Antiguo 27/06/2013, 09:05
Avatar de madman_18  
Fecha de Ingreso: agosto-2010
Mensajes: 792
Antigüedad: 14 años, 4 meses
Puntos: 14
Pregunta Encontrar elemento con una clase y quitarselo

Buenas tardes!

¿Cómo podría encontrar un elemento del menú con determinada clase y quitarsela?
Veréis, mi menú consta de:
Código HTML:
Ver original
  1. <nav class="menu" id="menu">
  2.                 <ul>
  3.                     <a href="#cooperativa"><li>Cooperativa</li></a>
  4.                     <a href="#aceites"><li>Aceites</li></a>
  5.                     <a href="#tienda"><li>Tienda On-line</li></a>
  6.                     <a href="#socios"><li class="activo">Zona Privada</li></a>
  7.                     <a href="#contacto"><li>Contacto</li></a>
  8.                 </ul>
  9.                 <div class="separator-menu"></div>
  10.             </nav>
Y en el script en el que asocio el click al href soy capaz de encontrar el elemento "li" con la clase activo...pero no soy capaz de quitarselo y asignarselo al que han pulsado.

Os pongo el código:

Código Javascript:
Ver original
  1. var mi_menu = "#"+id+" a[href*=#]";
  2.         var bloque = "#"+id;
  3.         $(mi_menu).click(function(){
  4.             //busco cualquier objeto que tenga la clase "activo"
  5.             if ($(bloque).find("li").hasClass('activo')){
  6.                 // hay alguno que está con clase 'activo'
  7.                 $(bloque).find("li").hasClass('activo').removeClass('activo');
  8.                 //he probado esto de aquí pero no lo realiza :(
  9.             }else{
  10.                 alert('No hay');
  11.             }            
  12.             if (location.pathname.replace(/^\//,'') === this.pathname.replace(/^\//,'')
  13.                    && location.hostname === this.hostname) {
  14.                      var $target = $(this.hash);
  15.                      $target = $target.length && $target
  16.                      || $('[name=' + this.hash.slice(1) +']');
  17.                      if ($target.length){                        
  18.                        var targetOffset = $target.offset().top;
  19.                        $('html,body').stop().animate({scrollTop: targetOffset}, 1800);
  20.                       return false;
  21.                      }
  22.                    }                                      
  23.             });
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, te convertes en algo muy diferente"
  #2 (permalink)  
Antiguo 27/06/2013, 13:49
 
Fecha de Ingreso: abril-2011
Mensajes: 1.342
Antigüedad: 13 años, 7 meses
Puntos: 344
Respuesta: Encontrar elemento con una clase y quitarselo

Para quitarlo sería así:

Código Javascript:
Ver original
  1. $(bloque).find("li.activo").removeClass('activo')

No es necesario usar hasClass y además, por eso no te funciona el código.

$(bloque).find("li").hasClass('activo').removeClass('activo');

hasClass devuelve un booleano, no puedes llamar a removeClass después
  #3 (permalink)  
Antiguo 28/06/2013, 00:49
Avatar de madman_18  
Fecha de Ingreso: agosto-2010
Mensajes: 792
Antigüedad: 14 años, 4 meses
Puntos: 14
Respuesta: Encontrar elemento con una clase y quitarselo

Cita:
Iniciado por alexg88 Ver Mensaje
Para quitarlo sería así:

Código Javascript:
Ver original
  1. $(bloque).find("li.activo").removeClass('activo')

No es necesario usar hasClass y además, por eso no te funciona el código.

$(bloque).find("li").hasClass('activo').removeClass('activo');

hasClass devuelve un booleano, no puedes llamar a removeClass después
Gracias! Ahora sí quito la clase

Lo único que ahora me surge es: ¿cómo le añado la clase al "li" que hay dentro del "a" para que tenga la clase 'activo'? Tendrá que ser el $(this) pero habría que añadirle algo que haga referencia al "li" (es que no he tocado mucho jQuery y aún me pierdo un poco en el trato de los objetos)
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, te convertes en algo muy diferente"
  #4 (permalink)  
Antiguo 28/06/2013, 01:34
Avatar de memoadian
Colaborador
 
Fecha de Ingreso: junio-2009
Ubicación: <?php echo 'México'?>
Mensajes: 3.696
Antigüedad: 15 años, 5 meses
Puntos: 641
Respuesta: Encontrar elemento con una clase y quitarselo

Bueno para empezar la estructura de tu lista está mal

es ul li a
no ul a li

ahora si lo que quieres hacer es hacer un menu con actives y no actives XD yo hago algo muy simple

Código Javascript:
Ver original
  1. $('nav li').click(function(){
  2.     $('nav li').removeClass("active");
  3.     $(this).addClass("active");
  4. });

ejemplo online http://jsfiddle.net/9nd4j/54/
  #5 (permalink)  
Antiguo 28/06/2013, 01:39
Avatar de madman_18  
Fecha de Ingreso: agosto-2010
Mensajes: 792
Antigüedad: 14 años, 4 meses
Puntos: 14
Respuesta: Encontrar elemento con una clase y quitarselo

Cita:
Iniciado por memoadian Ver Mensaje
Bueno para empezar la estructura de tu lista está mal

es ul li a
no ul a li

ahora si lo que quieres hacer es hacer un menu con actives y no actives XD yo hago algo muy simple

Código Javascript:
Ver original
  1. $('nav li').click(function(){
  2.     $('nav li').removeClass("active");
  3.     $(this).addClass("active");
  4. });

ejemplo online http://jsfiddle.net/9nd4j/54/
Ostras......es verdad tío! Ya decía yo que había algo en el menú que no me cuadraba...me chocaba el código jajajajaja momento despiste.
Probaré lo que me comentas a ver si así consigo el efecto que quiero :)
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, te convertes en algo muy diferente"
  #6 (permalink)  
Antiguo 28/06/2013, 02:09
Avatar de madman_18  
Fecha de Ingreso: agosto-2010
Mensajes: 792
Antigüedad: 14 años, 4 meses
Puntos: 14
Respuesta: Encontrar elemento con una clase y quitarselo

Creo que estoy chocando con algo.....

Con el código que me has dicho, memoadian, funciona el cambio de clase bien, pero ¿cómo le marco el evento de moverse el contenido? (lo tengo hecho con jQuery para darle el efecto de scroll suave) :S :S..

Ya es que estoy un poco mosqueado con esta web...tiene código que no es mío y repartido por 14mil sitios xD y ya ofusca un poco jeje ;)
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, te convertes en algo muy diferente"
  #7 (permalink)  
Antiguo 28/06/2013, 02:33
Avatar de madman_18  
Fecha de Ingreso: agosto-2010
Mensajes: 792
Antigüedad: 14 años, 4 meses
Puntos: 14
Respuesta: Encontrar elemento con una clase y quitarselo

Hey!!! Al final he dado con una solución....lo que he hecho a sido aumentar de tamaño los enlaces, en vez de tanta historia buscando el li, ahora mirar si es el que han pulsado etc etc.....

Muchas gracias por las ayudas!!
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, te convertes en algo muy diferente"

Etiquetas: clase, elemento, encontrar
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:45.