Foros del Web » Programando para Internet » Javascript »

asignar clase en vez de atributo a li de menú

Estas en el tema de asignar clase en vez de atributo a li de menú en el foro de Javascript en Foros del Web. Hola, saludos, tengo una duda que quizás sea sencilla, pero para mí no lo es, puesto que desconozco totalmente el lenguaje javascript. Mi petición es ...
  #1 (permalink)  
Antiguo 05/12/2012, 09:53
Avatar de a1989  
Fecha de Ingreso: septiembre-2012
Mensajes: 17
Antigüedad: 11 años, 7 meses
Puntos: 0
Pregunta asignar clase en vez de atributo a li de menú

Hola, saludos, tengo una duda que quizás sea sencilla, pero para mí no lo es, puesto que desconozco totalmente el lenguaje javascript. Mi petición es la siguiente:

Tengo un menú que es modificado por esta función, afecta a los li con el atributo value="1", me gustaría modificar esta función para que en vez de modificar el li que tenga el atributo value="1" modifique el li con la clase .selected.

Aquí está la función:

Código:
var menuSlider=function(){
	var m,e,g,s,q,i; e=[]; q=8; i=8;
	return{
		init:function(j,k){
			m=document.getElementById(j); e=m.getElementsByTagName('li');
			var i,l,w,p; i=0; l=e.length;
			for(i;i<l;i++){
				var c,v; c=e[i]; v=c.value; if(v==1){s=c; w=c.offsetWidth; p=c.offsetLeft}
				c.onmouseover=function(){menuSlider.mo(this)}; c.onmouseout=function(){menuSlider.mo(s)};
			}
			g=document.getElementById(k); g.style.width=w+'px'; g.style.left=p+'px';
		},
		mo:function(d){
			clearInterval(m.tm);
			var el,ew; el=parseInt(d.offsetLeft); ew=parseInt(d.offsetWidth);
			m.tm=setInterval(function(){menuSlider.mv(el,ew)},i);
		},
		mv:function(el,ew){
			var l,w; l=parseInt(g.offsetLeft); w=parseInt(g.offsetWidth);
			if(l!=el||w!=ew){
				if(l!=el){var ld,lr,li; ld=(l>el)?-1:1; lr=Math.abs(el-l); li=(lr<q)?ld*lr:ld*q; g.style.left=(l+li)+'px'}
				if(w!=ew){var wd,wr,wi; wd=(w>ew)?-1:1; wr=Math.abs(ew-w); wi=(wr<q)?wd*wr:wd*q; g.style.width=(w+wi)+'px'}
			}else{clearInterval(m.tm)}
}};}();
Si fueran tan amables de ayudarme se los agradecería mucho!!

Gracias.
  #2 (permalink)  
Antiguo 05/12/2012, 09:58
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: asignar clase en vez de atributo a li de menú

Tal vez si en lugar de v==1 pones c.className=='selected'
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #3 (permalink)  
Antiguo 05/12/2012, 11:25
Avatar de a1989  
Fecha de Ingreso: septiembre-2012
Mensajes: 17
Antigüedad: 11 años, 7 meses
Puntos: 0
Respuesta: asignar clase en vez de atributo a li de menú

Pido disculpas por no saber absolutamente nada de javascript, pero por otro lado, tu "tal vez" es absolutamente correcto, muchísimas gracias por mostrarme cómo era que se hacía, yo lo intenté pero no pude. Gracias!
  #4 (permalink)  
Antiguo 05/12/2012, 14:14
Avatar de a1989  
Fecha de Ingreso: septiembre-2012
Mensajes: 17
Antigüedad: 11 años, 7 meses
Puntos: 0
Respuesta: asignar clase en vez de atributo a li de menú

órale, ahora no funciona correctamente. la función hace su trabajo pero con dificultad. El menú está en un sitio hecho con joomla, el cual me crea los li con sus propias clases. la clase que sale el menú seleccionado es ".selected", pero además de esa clase por defecto le coloca otra que sirve de identificador o algo así, es una clase como esta: ".item101",

La cosa es que no toma el efecto cuando el li tiene mas de una clase, probé colocando la clase .item101 en la función, no funcionó porque también estaba la clase .selected, pero cuando seleccioné otra sección, la clase .selected desapareció y solo quedó .item101 y ahí si tomó bien la función.

ahora lo que quier es que en vez de que seleccione el li con la clase .selected tome un li con el id current, todos los li seleccionados tienen ese id, imagino que si solo tiene un id y no varios pueda ser que tome bien la función, probé de cambiar la función pero no hizo nada, cómo podría ser? :/

gracias!
  #5 (permalink)  
Antiguo 05/12/2012, 14:23
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: asignar clase en vez de atributo a li de menú

Podría ser:
Código Javascript:
Ver original
  1. if (/(^|\s)selected(\s|$)/.test(c.className))
  2.     // tiene la clase selected
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #6 (permalink)  
Antiguo 05/12/2012, 14:40
Avatar de a1989  
Fecha de Ingreso: septiembre-2012
Mensajes: 17
Antigüedad: 11 años, 7 meses
Puntos: 0
Respuesta: asignar clase en vez de atributo a li de menú

Muchas gracias por tu ayuda!!! lo conseguí de otra manera antes de ver tu respuesta. Por lógica pensé que había que cambiar class por id, lo hice de la siguiente manera:

lo que hice fue sustituir esto:
if(c.className=='selected')

por esto:
if(c.id=='current')

Lo conseguí de pura casualidad, ya que no manejo este lenguaje, pero pronto aprenderé javascript, pienso hacer cursos y leer tutoriales :)

Muchas gracias amigo!
  #7 (permalink)  
Antiguo 05/12/2012, 14:43
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: asignar clase en vez de atributo a li de menú

Me alegro que lo hayas intentado y conseguido.

Solo como comentario adicional, varios elementos no deberían compartir el id, este debe ser un identificador único en el documento.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.

Etiquetas: clase, vez, atributos
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 16:35.