Retroceder   Foros del Web > Programación para sitios web > Javascript

Respuesta
 
Herramientas Desplegado
Antiguo 09-jul-2008, 11:02   #1 (permalink)
punk567 no se puede cailificar en este momento
 
Avatar de punk567
 
Fecha de Ingreso: septiembre-2006
Mensajes: 109
de innerHTML a DOM, como?

Buenas tardes/noches.

Quisiera consultar una duda que tengo sobre javascript básico. He mirado por ahí que innerHTML estará obsoleto en poco tiempo, y que utilizar el DOM es W3C estandar. Y también que innerHTML es mucho más rápido que utilizar el DOM, cuando no vamos a reutilizar el código.

En mi caso necesito crear una función básica que intercambia el contenido de 2 divs, con un click, pego el código. Sería posible mejorarlo utilizando DOM? (para tener una referencia en futuros casos en JS)

Código HTML:
<head>
<script type="text/javascript">	
function intercambiar(e) {
	if (e == "uno") {
		var dos = document.getElementById("dos").innerHTML;
		document.getElementById("dos").innerHTML = document.getElementById("uno").innerHTML;
		document.getElementById("uno").innerHTML = dos;
	}
	else {
		var uno = document.getElementById("uno").innerHTML;
		document.getElementById("uno").innerHTML = document.getElementById("dos").innerHTML;
		document.getElementById("dos").innerHTML = uno;
	}
}
</script>
</head>
<body>
<div id="uno"> 11111111 <a href="#" onclick="intercambiar('uno')">click</a></div>
<div id="dos"> 22222222 <a href="#" onclick="intercambiar('dos')">click</a></div>
</body>
Saludos.
punk567 está desconectado   Responder Citando
Antiguo 09-jul-2008, 11:34   #2 (permalink)
Moderador
caricatos es realmente agradablecaricatos es realmente agradablecaricatos es realmente agradablecaricatos es realmente agradablecaricatos es realmente agradablecaricatos es realmente agradable
 
Avatar de caricatos
 
Fecha de Ingreso: noviembre-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 12.462
Respuesta: de innerHTML a DOM, como?

Hola:

Recuerdo que en estos foros, alguien hizo una comparativa para ver que era más rápido, y justamente llegó a la conclusión contraria, pero no creo que haya suficiente margen como para decidirse por el uso de una u otra opción... y sobre que estará obsoleto tampoco lo sabía... lo que es seguro es que no es estándar... pero su uso es tan masivo que se ha convertido en estándar "de facto" (creo que se dice así )...

Sobre lo de mejorar tu código con DOM no tengo la menor duda, ya que hay algunas cosas más que no todos usan... como cloneNode y replaceChild...

Código:
<html>
<head>
<title>
	Clonación
</title>
<script type="text/javascript">
function sube(que) {
	var nuevo = que.cloneNode(true);
	que.parentNode.appendChild(nuevo);
	que.parentNode.removeChild(que);
}
</script>
</head>
<body >
<div id="contenedor" style="position: relative; height: 200px">
<div id="amarillo" style="width: 120px; height: 120px; background-color: yellow; position: absolute; top: 5px; left: 5px; border: 1px solid black" onclick="sube(this)"></div>
<div id="rojo" style="width: 120px; height: 120px; background-color: red; position: absolute; top: 35px; left: 35px; border: 1px solid black" onclick="sube(this)"></div>
<div id="azul" style="width: 120px; height: 120px; background-color: blue; position: absolute; top: 65px; left: 65px; border: 1px solid black" onclick="sube(this)"></div>
</div>
</body>
</html>
Creo que este código lo mostré hace algunos años, solo hace falta que lo adaptes.

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
caricatos está desconectado   Responder Citando
Antiguo 09-jul-2008, 18:56   #3 (permalink)
punk567 no se puede cailificar en este momento
 
Avatar de punk567
 
Fecha de Ingreso: septiembre-2006
Mensajes: 109
Respuesta: de innerHTML a DOM, como?

Hola Caricatos, gracias por el aporte,

despues de un rato pude resolver esto (espero haya quedado mejor):
Código:
<script type="text/javascript">
function intercambia(que) {
	var nuevo = que.parentNode.firstChild.cloneNode(true);
	que.parentNode.appendChild(nuevo);
	que.parentNode.removeChild(que.parentNode.firstChild);
}
</script>
</head>
<body>
<div><div id="amarillo" onclick="intercambia(this)">amarillo</div><div id="azul" onclick="intercambia(this)">azul</div><div id="rojo" onclick="intercambia(this)">rojo</div></div>
</body>
</html>
lo que creo que es a la inversa del ejemplo que enviaste, en lugar de subir, baja, o intercambia con el anterior.

lo que me llamó la atención (y me hizo perder bastante tiempo)

es que si el código en el body era este:
Código:
<div>
<div id="amarillo" onclick="sube(this)">amarillo</div>
<div id="rojo" onclick="sube(this)">rojo</div>
<div id="azul" onclick="sube(this)">azul</div>
</div>
con simples saltos de línea entre los divs

debía de hacer 2 veces clic en las divs para "pasarlas"

Un saludo y muchas gracias por la ayuda
punk567 está desconectado   Responder Citando
Antiguo 09-jul-2008, 19:03   #4 (permalink)
Moderador
caricatos es realmente agradablecaricatos es realmente agradablecaricatos es realmente agradablecaricatos es realmente agradablecaricatos es realmente agradablecaricatos es realmente agradable
 
Avatar de caricatos
 
Fecha de Ingreso: noviembre-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 12.462
Respuesta: de innerHTML a DOM, como?

Hola:

No se trata de subir o bajar, sino en la práctica se pone encima de el resto de elementos, pero la realidad es que cada elemento se queda como último nodo (por lo de appendChild)...

Lo de los saltos de línea no he llegado a comprender...

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
caricatos está desconectado   Responder Citando
Respuesta

No hay votos aún.


Herramientas
Desplegado

Normas de Publicación
No puedes crear nuevos temas
No puedes responder temas
No puedes subir archivos adjuntos
No puedes editar tus mensajes

BB code is Activado
Caritas están Activado
[IMG] está Activado
Código HTML está Desactivado


La Zona horaria es GMT -6. Ahora son las 21:57.


Message Board Statistics

LinkBacks Enabled by vBSEO 3.1.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93