Foros del Web » Programando para Internet » Javascript »

[SOLUCIONADO] No puedo crear elementos en otra ventana.

Estas en el tema de No puedo crear elementos en otra ventana. en el foro de Javascript en Foros del Web. Hola a todos. Estoy tratando de desarrollar un sitio web y el problema es que no puedo agregar elementos creados con javascript a la ventana ...
  #1 (permalink)  
Antiguo 10/02/2014, 20:15
 
Fecha de Ingreso: febrero-2014
Ubicación: Rosario
Mensajes: 59
Antigüedad: 10 años, 2 meses
Puntos: 2
No puedo crear elementos en otra ventana.

Hola a todos.
Estoy tratando de desarrollar un sitio web y el problema es que no puedo agregar elementos creados con javascript a la ventana hecha también con javascript.
Les agradezco la ayuda que me puedan dar.

El archivo funciones_web.js tiene funciones para mostrar u ocultar contenido que no tienen ninguna relación con la ventana que estoy creando.
Puedo crear la ventana pero no introducir contenido a menos que lo haga con innerHTML o document.write();
Después de createElement y createTextNode el elemento introducido con "var cuerpo = ventana.document.getElementsByTagName(nodo);cuerpo .appendChild(producto);" no visualiza nada.

Código:
<html>
	<head>
		<title>Ventas Reino.</title>
		<link rel="stylesheet" type="text/css" href="estilos_web.css" />
		<script type="text/javascript" src="funciones_web.js">
		</script>
		<script type="text/javascript" >
		<!--
		function crearelemento(str) {
			var elemento = document.createElement("p");
			var texto = document.createTextNode(str);
			elemento.appendChild(texto);
			return elemento;
		}
		function cargar_chango(nodo){
				var ventana = open("","Chango","scrolling=yes",false);
				ventana.document.write("<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.01//EN' 'http://www.w3.org/TR/html4/strict.dtd'><br>");
				ventana.document.write("<html><head><meta http-equiv='content-type' content='text/html; charset=ISO-8859-1' /></head><body></body></html>");
				var producto = crearelemento("Ba&ntilde;o de crema con jojoba y almendras.");
				var cuerpo = ventana.document.getElementsByTagName(nodo);
				cuerpo.appendChild(producto);
			}
		//-->
		</script>
	</head>
	<body>
		<br>
		<div id="pagina">
			<div id="cabecera" >
<a href="#" id="comprar" onclick="cargar_chango('body');" >Comprar</a>
				</div>
			</div>
		</div>
	</body>
</html>

Última edición por zerokilled; 10/02/2014 a las 20:43 Razón: bbcode para codigos
  #2 (permalink)  
Antiguo 11/02/2014, 08:25
Colaborador
 
Fecha de Ingreso: septiembre-2013
Ubicación: España
Mensajes: 3.648
Antigüedad: 10 años, 8 meses
Puntos: 578
Respuesta: No puedo crear elementos en otra ventana.

Al elemento le estás añadiendo un hijo sin haberlo añadido antes al documento.
  #3 (permalink)  
Antiguo 11/02/2014, 08:58
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: No puedo crear elementos en otra ventana.

buenas,
@phperos, eso no tiene que ver nada. de hecho, es perfectamente legal agregar nodos a otros nodos que aún no están presentes en el documento.

el problema aquí es cuando obtiene el elemento al que será agregado. es decir, en la función cargar_chango, la variable cuerpo, es una lista de nodos. luego utiliza la lista sin indicar el índice de esa lista. cuerpo[0].appendChild.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.

Última edición por zerokilled; 12/02/2014 a las 09:52 Razón: error en nombre de variable
  #4 (permalink)  
Antiguo 12/02/2014, 09:15
 
Fecha de Ingreso: febrero-2014
Ubicación: Rosario
Mensajes: 59
Antigüedad: 10 años, 2 meses
Puntos: 2
Respuesta: No puedo crear elementos en otra ventana.

Hola.Gracias por responder a mi pedido.
Les comento que traté la solución de agregar [0] al getElementByTagName() pero no entiendo por que tengo que agregar eso si se supone que el body no tiene elementos hasta el momento.Si ya tuviera varios sé que se indexarían pero aún así ,estoy usando el appendchild() que hasta donde sé añade elementos al final de un conjunto de hijos de un elemento.De acuerdo a la teoría que leí en "mcgraw hill javascript the complete reference" hasta donde pude traducir,este método añade hijos al final de un elemento.
La solución funcionó pero no entiendo por qué debería ser así si appendchild debería funcionar.
Les agradezco por todo.
Por cierto,perdón por escribirles a modo de respuesta.Lo que pasa es que no sé como agregar mensajes míos a los que ya coloqué.Sólo sé responder a los mensajes de otros iniciando sesión en "foros del web" y clickando responder.
Les agradezco nuevamente y perdón por mi torpeza con la página "foros del web".
Gracias.
  #5 (permalink)  
Antiguo 12/02/2014, 09:41
Colaborador
 
Fecha de Ingreso: septiembre-2013
Ubicación: España
Mensajes: 3.648
Antigüedad: 10 años, 8 meses
Puntos: 578
Respuesta: No puedo crear elementos en otra ventana.

getElementsByTagName siempre genera un NodeList, por lo tanto tienes que especificar el index de esa lista como array o con el método item()
  #6 (permalink)  
Antiguo 12/02/2014, 09:49
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: No puedo crear elementos en otra ventana.

buenas,
estas en lo correcto respecto a appendChild agregar el elemento al final dentro del conjunto de elementos. la razón por la que hay que agregar el índice [0] no tiene ninguna relación con appendChild. el problema aquí es el tipo de valor que devuelve la función getElementsByTagName. si vas a la consola del navegador y pones un console.log de la variable cuerpo, observarás que el tipo de objeto no es un simple nodo, sino una colección de nodos (algo parecido a un array). esta colección de nodos es un objeto de tipo NodeList. no importa cuantos elementos (del indicado como parámetro) existen en el documento, la función siempre devolverá un NodeList. en fin, para accesar los nodos de un NodeList, tienes que utilizar la misma sintaxis como en los arrays. por eso el índice [0], para accesar al primer y único nodo de la variable (en tu caso).

pd: no hay de qué disculparse, así es como funciona el foro para responder temas/mensajes.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.

Última edición por zerokilled; 12/02/2014 a las 09:54

Etiquetas: elementos, funcion, html, js
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 12:41.