Foros del Web » Programando para Internet » Javascript »

Pequeña ayuda con getElementsByTagName

Estas en el tema de Pequeña ayuda con getElementsByTagName en el foro de Javascript en Foros del Web. Hola muchachos: Tengo el siguiente código: Código HTML: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content= "text/html; charset=utf-8" > <style type= ...
  #1 (permalink)  
Antiguo 18/06/2008, 10:39
 
Fecha de Ingreso: febrero-2008
Mensajes: 578
Antigüedad: 16 años, 2 meses
Puntos: 3
Pequeña ayuda con getElementsByTagName

Hola muchachos:

Tengo el siguiente código:

Código HTML:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<style type="text/css">
ul {margin:0;padding:0;} 
li {list-style:none;}
ul.menu li:hover, ul.menu li.over {background:#FF0000;}
</style>
</head>
<body>
<script type="text/javascript">
startList = function() {
 if (document.all&&document.getElementsByTagName) {
   navRoot = document.getElementsByTagName('ul').className="menu";
   for (i=0; i<navRoot.childNodes.length; i++) {
     node = navRoot.childNodes[i];
     if (node.nodeName=="LI") {
       node.onmouseover=function() {
         this.className+=" over";
       }
       node.onmouseout=function() {
         this.className=this.className.replace(" over", "");
       }
     }
   }
 }
}
window.onload=startList;
</script>
  <ul class="menu">
    <li>aaaaaa</li>
    <li>bbbbbb</li>
  </ul>
</body>
</html> 
En FF funciona perfecto, pero en IE no, no hace nada.
El problema está en esta línea:
navRoot = document.getElementsByTagName('ul').className="men u";

Ya que si en vez de getElementsByTagName uso el getElementById y le pongo <ul id="menu"> sí funciona.

Pero yo no quiero usar ID, sino clases... como hago ??
Es sencillo lo que pregunto ??
  #2 (permalink)  
Antiguo 18/06/2008, 10:44
Avatar de JavierB
Colaborador
 
Fecha de Ingreso: febrero-2002
Ubicación: Madrid
Mensajes: 25.052
Antigüedad: 22 años, 2 meses
Puntos: 772
Respuesta: Pequeña ayuda con getElementsByTagName

Hola Jamati

Prueba asi:

Código:
navRoot = document.getElementsByTagName('ul')[0].className = "menu";
Saludos,
  #3 (permalink)  
Antiguo 18/06/2008, 13:12
 
Fecha de Ingreso: febrero-2008
Mensajes: 578
Antigüedad: 16 años, 2 meses
Puntos: 3
Respuesta: Pequeña ayuda con getElementsByTagName

Gracias JavierB, pero lamentablemente no me funcionó ...

Adjunto el código con la modificación que me dijiste:

Código HTML:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<style type="text/css">
ul {margin:0;padding:0;} 
li {list-style:none;}
ul.menu li:hover, ul.menu li.over {background:#FF0000;}
</style>
</head>
<body>
<script type="text/javascript">
startList = function() {
 if (document.all&&document.getElementsByTagName) {
   navRoot = document.getElementsByTagName('ul')[0].className="menu";
   for (i=0; i<navRoot.childNodes.length; i++) {
     node = navRoot.childNodes[i];
     if (node.nodeName=="LI") {
       node.onmouseover=function() {
         this.className+=" over";
       }
       node.onmouseout=function() {
         this.className=this.className.replace(" over", "");
       }
     }
   }
 }
}
window.onload=startList;
</script>
  <ul class="menu">
    <li>aaaaaa</li>
    <li>bbbbbb</li>
  </ul>
</body>
</html> 
  #4 (permalink)  
Antiguo 18/06/2008, 14:01
Avatar de derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 20 años, 6 meses
Puntos: 45
Respuesta: Pequeña ayuda con getElementsByTagName

Hola Jamati:

Creo que tienes un problema en
Código PHP:
navRoot document.getElementsByTagName('ul')[0].className "menu"
Esa línea es equivalente a esta en cuestión de efectos para lo que queda de código:
Código PHP:
navRoot "menu"
Significa que navRoot es de tipo String, y no tiene childNodes ni nada de eso.


Saludos.
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.
  #5 (permalink)  
Antiguo 18/06/2008, 14:10
Avatar de JavierB
Colaborador
 
Fecha de Ingreso: febrero-2002
Ubicación: Madrid
Mensajes: 25.052
Antigüedad: 22 años, 2 meses
Puntos: 772
Respuesta: Pequeña ayuda con getElementsByTagName

¡Oops! es verdad. He añadido [0] al código y no me he dado cuenta de más.

Gracias derkenuke

Saludos,
  #6 (permalink)  
Antiguo 19/06/2008, 14:52
 
Fecha de Ingreso: febrero-2008
Mensajes: 578
Antigüedad: 16 años, 2 meses
Puntos: 3
Respuesta: Pequeña ayuda con getElementsByTagName

Gracias, tanto derkenuke como JavierB

Mi codigo quedó así:

Código HTML:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<style type="text/css">
ul {margin:0;padding:0;} 
li {list-style:none;}
ul.menu li:hover, ul.menu li.over {background:#FF0000;}
</style>
</head>
<body>
<script type="text/javascript">
startList = function() {
 if (document.all&&document.getElementsByTagName) {
   //navRoot = document.getElementsByTagName('ul').className="menu";
   navRoot = "menu";
   for (i=0; i<navRoot.childNodes.length; i++) {
     node = navRoot.childNodes[i];
     if (node.nodeName=="LI") {
       node.onmouseover=function() {
         this.className+=" over";
       }
       node.onmouseout=function() {
         this.className=this.className.replace(" over", "");
       }
     }
   }
 }
}
window.onload=startList;
</script>
  <ul class="menu">
    <li>aaaaaa</li>
    <li>bbbbbb</li>
  </ul>
</body>
</html> 
pero sigue sin funcionar el javascript en IE, en FF funciona bien el cambio de color en el <li>, pero en Explorer no quiere funcionar... y eso que puse lo que me dijeron ustedes....

Saludos y muchas gracias nuevamente.
  #7 (permalink)  
Antiguo 19/06/2008, 15:21
Avatar de derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 20 años, 6 meses
Puntos: 45
Respuesta: Pequeña ayuda con getElementsByTagName

Bueno, de hecho no sé ni por qué te funciona en FF.

Mira, debes asignale primero a navRoot:
Código PHP:
navRoot document.getElementsByTagName('ul')[0]; 
Y luego debes darle el className que quieras:
Código PHP:
navRoot.className="menu"
Pero tienen que ser dos pasos diferentes (dos instrucciones).


Así sí te funcionará.


Saludos.
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.

Última edición por derkenuke; 19/06/2008 a las 15:22 Razón: se me envió sin querer...
  #8 (permalink)  
Antiguo 20/06/2008, 07:17
 
Fecha de Ingreso: febrero-2008
Mensajes: 578
Antigüedad: 16 años, 2 meses
Puntos: 3
Respuesta: Pequeña ayuda con getElementsByTagName

Gracias derkenuke:

Ahora sí funcionó perfecto. Problema solucionado gracias a ustedes.

Saludos!!
  #9 (permalink)  
Antiguo 29/06/2008, 16:27
 
Fecha de Ingreso: febrero-2008
Mensajes: 578
Antigüedad: 16 años, 2 meses
Puntos: 3
Respuesta: Pequeña ayuda con getElementsByTagName

Gente, ahora me surgió un nuevo problema:

Este es mi codigo:

Código HTML:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<style type="text/css">
ul {margin:0;padding:0;} 
li {list-style:none;}
ul.menu li:hover, ul.menu li.over {background:#FF0000;}
</style>
</head>
<body>
<script type="text/javascript">
startList = function() {
  if (document.all&&document.getElementsByTagName) {
    navRoot = document.getElementsByTagName('ul')[0];
    navRoot.className="menu";
    for (i=0; i<navRoot.childNodes.length; i++) {
      node = navRoot.childNodes[i];
      if (node.nodeName=="LI") {
        node.onmouseover=function() {
          this.className+=" over";
        }
        node.onmouseout=function() {
          this.className=this.className.replace(" over", "");
        }
      }
    }
  }
}
window.onload=startList;
</script>
  <ul class="sobra">
    <li>UL SOBRA</li>
    <li>UL SOBRA</li>
  </ul>
  <ul class="menu">
    <li>UL MENU</li>
    <li>UL MENU</li>
  </ul>
</body>
</html> 
el cual funciona perfecto, pero si agrego más <ul> con cualquiera otra clase, el javascript me lo toma solo para el primer UL que encuentre... y según puedo entender con el javascript que puse, que supeustamente eso lo tendría que aplicar al UL con clase "menu"... como hago ?

Gracias nuevamente.
  #10 (permalink)  
Antiguo 30/06/2008, 08:46
 
Fecha de Ingreso: junio-2008
Mensajes: 60
Antigüedad: 15 años, 11 meses
Puntos: 2
Respuesta: Pequeña ayuda con getElementsByTagName

Es normal, solo estás cogiendo el elemento 0 de la colección de tags encontrados:
navRoot = document.getElementsByTagName('ul')[0];

Debes hacer un bucle para recorrer toda la coleccion y no quedarte solo en el primero:
var elements = document.getElementsByTagName('ul');
var j;
for (j=0; j < elements.length; j++)
{
navRoot = document.getElementsByTagName('ul')[j];
navRoot.className="menu";
for (i=0; i<navRoot.childNodes.length; i++) {
node = navRoot.childNodes[i];
if (node.nodeName=="LI") {
node.onmouseover=function() {
this.className+=" over";
}
node.onmouseout=function() {
this.className=this.className.replace(" over", "");
}
}
}
}
Sería algo así, no lo he probado pero para que te hagas una idea...
  #11 (permalink)  
Antiguo 30/06/2008, 09:40
 
Fecha de Ingreso: febrero-2008
Mensajes: 578
Antigüedad: 16 años, 2 meses
Puntos: 3
Respuesta: Pequeña ayuda con getElementsByTagName

Ok, lo pruebo y luego te aviso.

Muchas gracias.
  #12 (permalink)  
Antiguo 30/06/2008, 11:30
 
Fecha de Ingreso: febrero-2008
Mensajes: 578
Antigüedad: 16 años, 2 meses
Puntos: 3
Respuesta: Pequeña ayuda con getElementsByTagName

Otro gran problema !!!

Este es mi codigo:

Código HTML:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<style type="text/css">
ul.menu li.primera:hover, ul.menu li.primera.over {background:#FF0000;}
ul.menu li.segunda:hover, ul.menu li.segunda.over {background:#E5E5E5;}
</style>
</head>
<body>
<script type="text/javascript">
startList = function() {
  if (document.all&&document.getElementsByTagName) {
    navRoot = document.getElementsByTagName('ul')[0];
    navRoot.className="menu";
    for (i=0; i<navRoot.childNodes.length; i++) {
      node = navRoot.childNodes[i];
      if (node.nodeName=="LI") {
        node.onmouseover=function() {
          this.className+=" over";
        }
        node.onmouseout=function() {
          this.className=this.className.replace(" over", "");
        }
      }
    }
  }
}
window.onload=startList;
</script>
  <ul class="menu">
    <li class="primera">UL MENU</li>
    <li class="segunda">UL MENU</li>
  </ul>
</body>
</html> 
En FF funciona perfecto, quiere decir que la primer fila se pone roja y la segunda gris, pero en IE solo me toma el gris. Como que el Javascript no asinga bien el over teniendo en cuenta la clase que ya tenía.

Me entiendo ?

Bueno, desde ya muchas gracias por sus respuestas.

PD: ivangc, el problema que te comenté antes lo solucioné en vez de poner [0] le puse la posición que ocupaba dicho UL en la página, como iba a estar en un encabezado, simpre será el tercer UL que aparezca en la página, por eso le puse [2]
  #13 (permalink)  
Antiguo 30/06/2008, 15:03
 
Fecha de Ingreso: febrero-2008
Mensajes: 578
Antigüedad: 16 años, 2 meses
Puntos: 3
Respuesta: Pequeña ayuda con getElementsByTagName

alguna ayuda ?
  #14 (permalink)  
Antiguo 30/06/2008, 15:50
Avatar de MaBoRaK  
Fecha de Ingreso: abril-2003
Ubicación: La Paz - Bolivia
Mensajes: 2.003
Antigüedad: 21 años
Puntos: 35
Respuesta: Pequeña ayuda con getElementsByTagName

loading....................


reemplaza esto

Código PHP:
        node.onmouseout=function() {
                   
this.className=this.className.replace(" over"""); 
por

Código PHP:
        node.onmouseout=function() {
                   
this.className=this.className.split(" ")[0]; 
veremos si funciona :D

connection closed.
__________________

Maborak Technologies
  #15 (permalink)  
Antiguo 30/06/2008, 15:53
 
Fecha de Ingreso: junio-2008
Mensajes: 60
Antigüedad: 15 años, 11 meses
Puntos: 2
Respuesta: Pequeña ayuda con getElementsByTagName

He hestado probando tu script y la verdad que no entiendo muy bien el comportamiento del explorerm ya que el código está correcto. Lo unico que puedo aportar como una posible solución (si no encuentras otra) es modificar el estilo del li 'al vuelo' con la propiedad style: this.style.color = "#FF0000". Pero bueno, no es una buena solución.

Saludos.

Cita:
Iniciado por Jamati Ver Mensaje
alguna ayuda ?
  #16 (permalink)  
Antiguo 30/06/2008, 20:04
 
Fecha de Ingreso: febrero-2008
Mensajes: 578
Antigüedad: 16 años, 2 meses
Puntos: 3
Respuesta: Pequeña ayuda con getElementsByTagName

Gracias por las respuesta. Paso a comentar:

MaBoRaK:
No me funcionó poniendo "this.className=this.className.split(" ")[0];"
en IE sigue funcionando mal.


ivangc:
Esa solución podría ser, pero en verdad este codigo que puse es un ejemplo, ya que en verdad necesito otra cosa, pero resolviendo esto usando dicho javascript podré solucionar mi problema.

Gracias a todos y espero que alguien sepa ayudarme.

Saludos
  #17 (permalink)  
Antiguo 01/07/2008, 00:17
 
Fecha de Ingreso: junio-2008
Mensajes: 60
Antigüedad: 15 años, 11 meses
Puntos: 2
Respuesta: Pequeña ayuda con getElementsByTagName

Yo si fuese tu miraría mejor la parte de CSS del explorer, ya que no es un problema de javascript, que funciona correctamente, si no un problema de renderizado del navegador. Suerte :)

Cita:
Iniciado por Jamati Ver Mensaje
Gracias por las respuesta. Paso a comentar:

MaBoRaK:
No me funcionó poniendo "this.className=this.className.split(" ")[0];"
en IE sigue funcionando mal.


ivangc:
Esa solución podría ser, pero en verdad este codigo que puse es un ejemplo, ya que en verdad necesito otra cosa, pero resolviendo esto usando dicho javascript podré solucionar mi problema.

Gracias a todos y espero que alguien sepa ayudarme.

Saludos
  #18 (permalink)  
Antiguo 01/07/2008, 07:54
 
Fecha de Ingreso: febrero-2008
Mensajes: 578
Antigüedad: 16 años, 2 meses
Puntos: 3
Respuesta: Pequeña ayuda con getElementsByTagName

Medio raro entonces, porque yo también analizando el javascript me puedo dar cuenta que supuestamente debería funcionar bien... pero el CSS también está bien... entonces no sé que hacer.

Veremos si alguien con más conocimientos nos puede dar una mano.

Saludos y gracias.
  #19 (permalink)  
Antiguo 01/07/2008, 08:30
Avatar de derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 20 años, 6 meses
Puntos: 45
Respuesta: Pequeña ayuda con getElementsByTagName

Hola de nuevo:

Sí, es un fallo de CSS:
Código PHP:
ul.menu #primera:hover, ul.menu #primera.over {background:#FF0000;}
ul.menu #segunda:hover, ul.menu #segunda.over {background:#E5E5E5;} 
Y en el HTML
Código HTML:
 <ul class="menu">
    <li id="primera">UL MENU</li>
    <li id="segunda">UL MENU</li>
  </ul> 
Si alguien puede explicar el error me gustaría conocerlo, porque he hecho muchas pruebas y no he llegado a entenderlo.

Lo que sí sé es que en el código original IE sólo toma como buena (y válida para los dos LI) la última sentencia CSS, le da igual que sea .primera que .segunda.

Saludos.
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.
  #20 (permalink)  
Antiguo 01/07/2008, 08:53
 
Fecha de Ingreso: febrero-2008
Mensajes: 578
Antigüedad: 16 años, 2 meses
Puntos: 3
Respuesta: Pequeña ayuda con getElementsByTagName

Gracias derkenuke.

Lo probé como dijiste y funciona perfecto. Lastima que ya tenía toda mi clase puesta con CLASS y me da intriga tener que cambiar por un ID. Me hubiese gustado tener otra solución así solamente modificaba el CSS... pero por lo visto el maldito IE hace lo que quiere.

Si alguien tiene otra ayuda se lo agradeceré mucho.
Nuevamente muchas gracias derkenuke.

Saludos
  #21 (permalink)  
Antiguo 01/07/2008, 09:40
Avatar de Mikmoro
Colaborador
 
Fecha de Ingreso: octubre-2006
Ubicación: K-pax
Mensajes: 7.228
Antigüedad: 17 años, 6 meses
Puntos: 280
Respuesta: Pequeña ayuda con getElementsByTagName

En IE6 no funciona la concatenación de clases .clase1.clase2 (clase1 y clase2), tomando sólo la última de estas en la declaración. Por lo tanto, creo que tendrías que cambiar un poco de estrategia con algo como esto:

Cita:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<style type="text/css">
ul.menu li.primera:hover, ul.menu li.primera_over {background:#FF0000;}
ul.menu li.segunda:hover, ul.menu li.segunda_over {background:#E5E5E5;}
</style>
</head>
<body>
<script type="text/javascript">
startList = function() {
if (document.all&&document.getElementsByTagName) {
navRoot = document.getElementsByTagName('ul')[0];
navRoot.className="menu";
for (i=0; i<navRoot.childNodes.length; i++) {
node = navRoot.childNodes[i];
if (node.nodeName=="LI") {
node.onmouseover=function() {
this.className+="_over";
}
node.onmouseout=function() {
this.className=this.className.replace("_over", "");
}
}
}
}
}
window.onload=startList;
</script>
<ul class="menu">
<li class="primera">UL MENU</li>
<li class="segunda">UL MENU</li>
</ul>
</body>
</html>
Mikel.
  #22 (permalink)  
Antiguo 01/07/2008, 10:10
 
Fecha de Ingreso: febrero-2008
Mensajes: 578
Antigüedad: 16 años, 2 meses
Puntos: 3
Respuesta: Pequeña ayuda con getElementsByTagName

Sin palabras. Justamente esa solución andaba buscando.
No tengo que cambiar nada, solo el Javascript y el archivo de CSS.

Que te puedo decir Mikel?, muchísimas gracias. Lo probé y funciona perfecto.

Saludos.
  #23 (permalink)  
Antiguo 01/07/2008, 10:16
Avatar de derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 20 años, 6 meses
Puntos: 45
Respuesta: Pequeña ayuda con getElementsByTagName

Me lo esperaba Mikmoro, sospechaba que por ahí iban los tiros.

Gracias por aclararlo. Además buena solución.

Saludos!
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.
  #24 (permalink)  
Antiguo 01/07/2008, 11:45
Avatar de Mikmoro
Colaborador
 
Fecha de Ingreso: octubre-2006
Ubicación: K-pax
Mensajes: 7.228
Antigüedad: 17 años, 6 meses
Puntos: 280
Respuesta: Pequeña ayuda con getElementsByTagName

De nada, es un placer. Era más sencillo de lo que parecía.

Mikel.
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 18:00.