Cómo agregar esta cadena HTML
var str = '<p>Just some <span>text</span> here</p>';
al DIV con el ID 'test'
que está en el DOM?
(Por cierto div.innerHTML += str;
no es aceptable).
javascript
html
dom
browser
Šime Vidas
fuente
fuente
innerHTML
coloca la cadena en el elemento (reemplazando a todos los hijos), mientras que lainsertAdjacentHTML
coloca (1) antes del elemento, (2) después del elemento, (3) dentro del elemento antes del primer hijo o (4) dentro del elemento después del último hijo.insertAdjacentHTML
es más rápido que agregar ainnerHTML
, porqueinsertAdjacentHTML
no serializa ni analiza los elementos secundarios existentes del elemento.insertAdjacentHTML
mantiene los valores de los elementos de formulario alterados, mientras que agregar ainnerHTML
reconstruye el elemento y pierde todo el contexto del formulario.¿Es esto aceptable?
jsFiddle .
Sin embargo , la respuesta de Neil es una solución mejor.
fuente
innerHTML
?insertAdjacentHTML
.Actuación
AppendChild
(E) es más del doble de rápido que otras soluciones en Chrome y Safari,insertAdjacentHTML
(F) es más rápido en Firefox. LainnerHTML=
(B) (no confundir con+=
(A)) es la segunda solución rápida en todos los navegadores y es mucho más útil que E y F.Detalles
Configurar entorno (2019.07.10) MacOs High Sierra 10.13.4 en Chrome 75.0.3770 (64 bits), Safari 11.1.0 (13604.5.6), Firefox 67.0.0 (64 bits)
Puede reproducir la prueba en su máquina aquí
Mostrar fragmento de código
fuente
La idea es usar
innerHTML
en un elemento intermediario y luego mover todos sus nodos secundarios a donde realmente los deseaappendChild
.Esto evita eliminar cualquier controlador de eventos,
div#test
pero aún le permite agregar una cadena de HTML.fuente
La forma correcta es usar
insertAdjacentHTML
. En Firefox anterior a la 8, puede volver a usarloRange.createContextualFragment
sistr
no contienescript
etiquetas.Si
str
contienescript
etiquetas, debe eliminarscript
elementos del fragmento devuelto porcreateContextualFragment
antes de insertar el fragmento. De lo contrario, se ejecutarán los scripts. (insertAdjacentHTML
marca los scripts como no ejecutables).fuente
createContextualFragment
. Estaba buscando una manera de hacer que algunas inclusiones html con scripts se ejecuten solo si el usuario acepta configurar una cookie.Hack rápido :
Casos de uso :
1: Guarde como archivo .html y ejecútelo en Chrome o Firefox o Edge. (IE no funcionará)
2: usar en http://js.do
En acción: http://js.do/HeavyMetalCookies/quick_hack
Desglosado con comentarios:
Razón por la que publiqué:
JS.do tiene dos elementos imprescindibles:
Pero no muestra mensajes de console.log. Vine aquí buscando una solución rápida. Solo quiero ver los resultados de algunas líneas de código del bloc de notas, las otras soluciones son demasiado trabajo.
fuente
¿Por qué eso no es aceptable?
document.getElementById('test').innerHTML += str
sería la forma de libro de texto de hacerlo.
fuente
#test
. Eso generalmente no es deseable.Esto puede resolver
fuente
InnerHTML borra todos los datos como eventos para los nodos existentes
append child con firstChild agrega solo el primer niño a innerHTML. Por ejemplo, si tenemos que agregar:
solo aparecerá el texto1
¿Qué pasa con esto?
agrega una etiqueta especial a innerHTML agregando child y luego edita externalHTML eliminando la etiqueta que hemos creado. No sé qué tan inteligente es, pero funciona para mí o puede cambiar outerHTML a innerHTML para que no tenga que usar la función reemplazar
fuente
Más corto : 18 caracteres (no confundir
+=
(mencionado por OP) con=
más detalles aquí )Mostrar fragmento de código
fuente