2011-08-05 14 views
5

Puedo hacer esto:Reemplazar elemento completo en lugar de innerHTML?

$('my-panel').innerHTML = '<p> New content </p>'; 

Pero si hay alguna manera de hacer algo como

$('my-panel').wholeHTML = "<div id='my-panel'><p> New Content</p></div>"; 

No puedo encontrar ninguna manera. Si no puedo hacer algo como esto, tendré que refactorizar un montón de cosas, lo que llevaría mucho tiempo.

Respuesta

6

¿Qué hay de outerHTML, que incluye la etiqueta de 'todo':

$('my-panel').outerHTML = '<p> New content </p>'; 

http://jsfiddle.net/pimvdb/Sah2U/1/

+0

Eh, eso funcionó. Debería haberlo intentado realmente, gracias. ¿Hay alguna lista de API en algún lugar para esto? La página que estaba viendo no hace ninguna referencia a outerHTML. – Oliver

+0

@Oliver: No puedo encontrarlo en MDN (raro) pero MSDN tiene una buena referencia: http://msdn.microsoft.com/en-us/library/ms534310(v=vs.85).aspx. – pimvdb

+0

Ouch, solo mirando un poco, aparentemente .outerHTML no es estándar y no funciona en algunos navegadores. – Oliver

1

siempre se puede obtener la parentNode etiquetas y reemplazar a su innerHTML

  $('my-panel').parentNode.innerHTML = '<p> New Content</p>' 
+2

Eso funcionaría muy bien, excepto si hay más elementos secundarios del elemento primario, en cuyo caso se destruirán. – pimvdb

+0

Esto era lo que estaba haciendo el código antes de cambiarlo. El escritor original solucionó el problema al introducir un div adicional solo para ese propósito, pero odio hacer cosas como esas. – Oliver

2

Se utiliza mootools, ¿derecho? puede reemplazar fácilmente el elemento, es decir:

Elements.from("<div id='my-panel'><p> New Content</p></div>").replaces($("my-panel")); 
+0

Oooh, eso es útil. Haré eso en el futuro. – Oliver

+0

Y es cross browser :) – stecb