Foros del Web » Programando para Internet » Javascript »

[SOLUCIONADO] comenzando con Js y un error -.-

Estas en el tema de comenzando con Js y un error -.- en el foro de Javascript en Foros del Web. hola gente. bueno estoy adentrandome en lo que es Javascript y haciendo algunas pruebas sencillas, pero algunas me salen y otras no. el tema es ...
  #1 (permalink)  
Antiguo 23/09/2013, 19:47
Avatar de ignacio85r  
Fecha de Ingreso: mayo-2010
Ubicación: mar del plata
Mensajes: 155
Antigüedad: 13 años, 11 meses
Puntos: 0
Pregunta comenzando con Js y un error -.-

hola gente. bueno estoy adentrandome en lo que es Javascript y haciendo algunas pruebas sencillas, pero algunas me salen y otras no.

el tema es asi... quiero cambiar el color de 3 parrafos dentro de un id.
me canse re revisar el codigo y no encuentro el error o porque no funciona.

en la consola de chrome me muestra el siguiente texto.

Uncaught TypeError: Cannot set property 'color' of undefined
.

dejo el codigo... aver si alguien me da una mano o me orienta un poquito.

desde ya muchas gracias!!!

Código:
<html>
	<head>
		<title>ejemplo</title>
		<script src="funciones.js" type="text/javascript"></script>
	</head>
	<body>
		<div id="bloque">
			<p>primer parrafo</p>
			<p>segundo parrafo</p>
			<p>tercer parrafo</p>
		</div>
		<input type="button" value="cambiar color" onclick="cambiarColor()">
	</body>
</html>
Código:
function cambiarColor()
{	
	var lista=document.getElementById('bloque');
	lista.childNodes[0].style.color='#ff0000';
	lista.childNodes[1].style.color='#00ff00';
	lista.childNodes[2].style.color='#0000ff';

	alert('la cantidad de hijos del nodo div es de:'+lista.childNodes.length);
}
  #2 (permalink)  
Antiguo 23/09/2013, 23:34
Avatar de patilanz  
Fecha de Ingreso: enero-2012
Mensajes: 880
Antigüedad: 12 años, 3 meses
Puntos: 29
Respuesta: comenzando con Js y un error -.-

Si haces : console.log(lista.childNodes); ves que te muestra mas de 3 nodos ya que ademas del parrafe en si esta el texto dentro de este.

Intenta asi:
Código Javascript:
Ver original
  1. function cambiarColor()
  2. {  
  3.     var lista=document.getElementById('bloque');
  4.     console.log(lista.childNodes); //Luego si quieres elimina
  5.     lista.childNodes[1].style.color='#ff0000';
  6.     lista.childNodes[3].style.color='#00ff00';
  7.     lista.childNodes[5].style.color='#0000ff';
  8.  
  9.     alert('la cantidad de hijos del nodo div es de:'+lista.childNodes.length);
  10. }

Saludos
  #3 (permalink)  
Antiguo 24/09/2013, 00:41
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Respuesta: comenzando con Js y un error -.-

Hola:

Cita:
Iniciado por patilanz Ver Mensaje
... ya que ademas del parrafe en si esta el texto dentro de este.
...
Saludos
No es exacto ya que childNodes trata solo de nodos hijos y no los nietos...
Los nodos de más son debidos a saltos de línea o espacios en blanco o tabuladores, etc (que son también nodos de texto)...

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #4 (permalink)  
Antiguo 24/09/2013, 07:10
Avatar de patilanz  
Fecha de Ingreso: enero-2012
Mensajes: 880
Antigüedad: 12 años, 3 meses
Puntos: 29
Respuesta: comenzando con Js y un error -.-

Cita:
Iniciado por caricatos Ver Mensaje
Hola:



No es exacto ya que childNodes trata solo de nodos hijos y no los nietos...
Los nodos de más son debidos a saltos de línea o espacios en blanco o tabuladores, etc (que son también nodos de texto)...

Saludos
Tienes razón pero los tabuladores son 3 en cada párrafo ??

Como funciona exactamente?

Saludos
  #5 (permalink)  
Antiguo 24/09/2013, 07:18
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Respuesta: comenzando con Js y un error -.-

Hola:

Cita:
Iniciado por patilanz Ver Mensaje
...

Como funciona exactamente?

Saludos
No sé exactamente cuantos tipos de nodos hay, pero están los que son a la vez nodos, (o sea otras etiquetas), nodos de texto y comentarios (<!-- ... -->)... un tabulador, un tag "br" y otro tabulador son tres nodos, pero tres tabuladores es solo un nodo con tres caracteres.

Hay una página mía que se llama destripador que muestra las tripas de esa misma página... es bastante instructiva.

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #6 (permalink)  
Antiguo 24/09/2013, 13:16
Avatar de patilanz  
Fecha de Ingreso: enero-2012
Mensajes: 880
Antigüedad: 12 años, 3 meses
Puntos: 29
Respuesta: comenzando con Js y un error -.-

Hola vi tu web de destripador esta muy interesante pero para comprobar lo de los espacio y tabulaciones lo hize con chrome y realmente las tabulaciones son nodos pero tambien los espacios. Los hacia editando el html directamente desde el debug de chrome y al agregar nuevos nodos cada vez que empiezo de nuevo se agregan nuevos nodos.

Saludos
  #7 (permalink)  
Antiguo 24/09/2013, 14:50
Avatar de ignacio85r  
Fecha de Ingreso: mayo-2010
Ubicación: mar del plata
Mensajes: 155
Antigüedad: 13 años, 11 meses
Puntos: 0
Respuesta: comenzando con Js y un error -.-

primero que nada muchas gracias por las repuestas. ahora =

probando lo primero de todo funciono. gracias patilanz!
ahora quiero saber...

el texto dentro de los <p> tambien se considera como un hijo de estos???

ya que el mensaje que sale en pantalla me informa que la cantidad de nodos del div es de 7.

por otro lado... Caricatos, cuando hablas de que "Los nodos de más son debidos a saltos de línea o espacios en blanco o tabuladores, etc (que son también nodos de texto)..." como es eso exactamente?

entonces... pienso... que la etiqueta <p> seria el valor [0] y el contenido de este seria el valor [1]????


expliquenme que quiero aprender!!!! y entender!


desde ya, nuevamente muichas gracias por las respuestas... me fueron de gran utlidad!!!

Última edición por ignacio85r; 24/09/2013 a las 16:58 Razón: agregar contenido y preguntas...
  #8 (permalink)  
Antiguo 24/09/2013, 17:18
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Respuesta: comenzando con Js y un error -.-

Hola:

Básicamente:

<div>
<p>
hola
</p>
<br/>
<p>
amigo
</p>
</div>

Con esta estructura, el primer párrafo es childNodes[1] (con respecto al div), porque el índice 0 es el salto de línea... el br es el childNodes[3], porque el 2 es un salto de línea entre el cierre del párrafo y el br..., etc.

... en cambio:


<div><p>hola</p><br/><p>amigo</p></div>

entre el tag div y el párrafo no ponemos un salto de línea, o sea que es chidNodes[0]; y el br por la misma razón es childNodes[1]...

En el primero de los casos hay nodos de texto que se corresponden solo con los saltos de línea... y en el segundo caso no los hay... Y no es parte de los chilNodes ni "hola", ni "amigo"...

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #9 (permalink)  
Antiguo 24/09/2013, 17:31
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: comenzando con Js y un error -.-

¡buenas gentes!

@ignacio85r, lo que sucede es bien simple. cuando el navegador analiza el documento html se va creando un árbol jerárquico de nodos. como explicaba @caricatos, todos los nodos tienen una clasificación que se le asigna según sea la estructura del contenido en el documento. un salto de línea, un espacio, o un tabulador, aunque visualmente no tienen forma, siguen siendo caracteres tal cual como cualquier otro. al estos caracteres no estar dentro de lo que delimita un elemento ( < > ) o un atributo, normalmente se considera como un nodo tipo texto.

entonces, tomando en consideración los dos puntos antes mencionados, a nivel de bytes el navegador lee algo como lo siguiente (asumiendo que el texto en rojo es un byte por si solo): </elementoX>-salto linea-<elementoY>. es decir, el cierre de un elemento, un salto de línea, y el inicio de un elemento. (en el ejemplo estoy omitiendo el inicio del primer elemento y el cierre del segundo elemento el cual son parte de los nodos correspondientes.) ahí hay tres nodos: dos de tipo Element y uno de tipo Text. se crea porque ese salto de línea no corresponde a un delimitador de elemento o atributo. lo mismo sucede, no solo con los whitespace, sino con el resto de los caracteres que no conforman parte de la sintaxis del lenguaje.

Código:
este ejemplo, en esencia lucen similares, pero a nivel de jerarquía son distintos
<elemX attrib="val">salto linea fuera de elemento
<elemY>
content
</elemY>salto linea fuera de elemento
</elemX>

<elemX attrib="val"salto linea dentro de elemento
><elemY>
content
</elemYsalto linea dentro de elemento
></elemX>
el primer código, elemX tiene tres nodos: Text, Element, Text. el segundo código, elemX tiene un solo nodo: Element. luego en ambos códigos, elemY tiene un solo nodo: Text. ésto porque en el contenido del elemento elemY no hay nada que le indique al navegador que debe crear un nodo de un tipo distinto a Text. recuerda el segundo punto, el whitespace no es un delimitador del lenguaje al igual que otros caracteres, como el alfanumérico.

para más información, te recomiendo que leas acerca de la jerarquía de nodos; o lo mismo que sobre la estructura del DOM.

Cita:
Iniciado por Edit
vaya, que me tome mucho tiempo en redactar igual tienes dos fuentes de información para complementar.
saludos
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.

Última edición por zerokilled; 24/09/2013 a las 17:41
  #10 (permalink)  
Antiguo 25/09/2013, 05:45
Avatar de ignacio85r  
Fecha de Ingreso: mayo-2010
Ubicación: mar del plata
Mensajes: 155
Antigüedad: 13 años, 11 meses
Puntos: 0
Respuesta: comenzando con Js y un error -.-

simplemente magistral la explicacion. muchas gracias a todos (pantilaz, zerokilled y caricatos) los que colaboraron ayudandome!

me quedo mas que claro. y ahora se el por que no me funcionaba.

procedo a cerrar el tema nomas. asi queda como resuelto.

saludos a todos desde Arg..

cualquier cosa vuelvo a molestar jeejejeje

Etiquetas: javascript+html
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 13:05.