Agregar elemento div al cuerpo o documento en JavaScript


139

Estoy creando una caja de luz en JavaScript puro. Para eso estoy haciendo una superposición. Quiero agregar esta superposición al cuerpo, pero también quiero mantener el contenido en la página. Mi código actual agrega el div de superposición, pero también elimina el contenido actual en el cuerpo. ¿Cómo agregar un elemento div y mantener los contenidos en el cuerpo?

var el = document.getElementById('element');
var body = document.getElementsByTagName('body');
el.innerHTML = '<p><a id="clickme" href="#">Click me</a></p>';
document.getElementById('clickme').onclick = function (e) {
    e.preventDefault();
    document.body.innerHTML = '<div style="position:absolute;width:100%;height:100%;opacity:0.3;z-index:100;background:#000;"></div>';
}

44
¿Ha intentado agregarlo como: document.body.innerHTML = '<div style = "position: absolute; width: 100%; height: 100%; opacity: 0.3; z-index: 100; background: # 000;" > </div> '+ document.body.innerHTML;
Ricky

Respuestas:


159

Probar esto:-

http://jsfiddle.net/adiioo7/vmfbA/

Utilizar

document.body.innerHTML += '<div style="position:absolute;width:100%;height:100%;opacity:0.3;z-index:100;background:#000;"></div>';

en vez de

document.body.innerHTML = '<div style="position:absolute;width:100%;height:100%;opacity:0.3;z-index:100;background:#000;"></div>';

Editar: - Idealmente, debe usar el body.appendChildmétodo en lugar de cambiar elinnerHTML

var elem = document.createElement('div');
elem.style.cssText = 'position:absolute;width:100%;height:100%;opacity:0.3;z-index:100;background:#000';
document.body.appendChild(elem);

18
Debe tener en cuenta que hacer document.body.innerHTML = 'algo' incurre en muchos cálculos innecesarios porque el navegador necesita analizar la cadena 'algo' y eso toma mucho en una página grande. Un enfoque mucho más eficaz es crear el nuevo elemento y adjuntarlo al DOM. Compruebe esta comparación en jsperf: jsperf.com/innerhtml-vs-appendchild2
fegemo

14
Este enfoque también tendrá algunos efectos secundarios no deseados. Por ejemplo, todos los eventos vinculados en elementos secundarios se desvincularán una vez que establezca de innerHTMLnuevo.
Anoopelias

55
Esta es definitivamente la respuesta incorrecta ... la pregunta se refiere a agregar un elemento, no a reescribir toda la página, ver JPH para una mejor alternativa.
Christian

44
-1. Esta es una forma horrible de lograr esto. Si está leyendo esto, no use esta solución lenta y anticuada. Mira la respuesta de @ peter-t
MacroMan

3
¡Esto no solo es lento, sino que destruye los elementos anteriores, por lo que se pierden los oyentes de eventos adjuntos a la página anterior! Evite hacer esto a toda costa. Use appendChild en su lugar.
Kranthi Kiran P

223

Usando Javascript

var elemDiv = document.createElement('div');
elemDiv.style.cssText = 'position:absolute;width:100%;height:100%;opacity:0.3;z-index:100;background:#000;';
document.body.appendChild(elemDiv);

Usando jQuery

$('body').append('<div style="position:absolute;width:100%;height:100%;opacity:0.3;z-index:100;background:#000;"></div>');

2
Lo más extraño. en el peor de los casos, javascript puro siempre ha sido la forma de hacer lo que quería hacer.
Spencer Williams

3
Esta debería ser la respuesta aceptada. Es la única respuesta que trata sobre esto de la manera correcta.
MacroMan

@MacroMan ¿Incluso la versión jquery? Estoy usando jquery y me gustaría hacerlo correctamente de esa manera también. (Solo asegurándose porque su respuesta jquery es solo una línea y no parece crear un nodo ni nada.)
Felwithe

@felwithe La versión jQuery es aceptable, pero es posible que desee crear un nodo desde cero y aplicar los estilos individualmente si necesita más claridad en su código.
MacroMan

appendChild()y insertBefore()dar aún más flexibilidad en la ubicación del elemento que se insertará
averasko


12

mejorando la publicación de @Peter T, al reunir todas las soluciones en un solo lugar.

Element.insertAdarestHTML ()

function myFunction() {
    window.document.body.insertAdjacentHTML( 'afterbegin', '<div id="myID" style="color:blue;"> With some data...</div>' );
}
function addElement(){
    var elemDiv = document.createElement('div');
    elemDiv.style.cssText = 'width:100%;height:10%;background:rgb(192,192,192);';
    elemDiv.innerHTML = 'Added element with some data'; 
    window.document.body.insertBefore(elemDiv, window.document.body.firstChild);
    // document.body.appendChild(elemDiv); // appends last of that element
}
function addCSS() {
    window.document.getElementsByTagName("style")[0].innerHTML += ".mycss {text-align:center}";
}

Usando XPathencontrar la posición del elemento en el árbol DOM e insertar el texto especificado en una posición especificada a un XPath_Element. prueba este código en la consola del navegador.

function insertHTML_ByXPath( xpath, position, newElement) {
    var element = document.evaluate(xpath, window.document, null, 9, null ).singleNodeValue;
    element.insertAdjacentHTML(position, newElement);
    element.style='border:3px solid orange';
}

var xpath_DOMElement = '//*[@id="answer-33669996"]/table/tbody/tr[1]/td[2]/div';
var childHTML = '<div id="Yash">Hi My name is <B>\"YASHWANTH\"</B></div>';
var position = 'beforeend';
insertHTML_ByXPath(xpath_DOMElement, position, childHTML);

2

Trata de hacerlo

document.body.innerHTML += '<div style="position:absolute;width:100%;height:100%;opacity:0.3;z-index:100;background:#000;"></div>'

2

Puede crear su divcódigo HTML y configurarlo directamente en body(O cualquier elemento) con el siguiente código:

var divStr = '<div class="text-warning">Some html</div>';
document.getElementsByTagName('body')[0].innerHTML += divStr;

La mejor y más fácil manera. ¡Gracias!
Muhammad Ali

1

La forma moderna es usar ParentNode.append(), así:

let element = document.createElement('div');
element.style.cssText = 'position:absolute;width:100%;height:100%;opacity:0.3;z-index:100;background:#000;';
document.body.append(element);


0

La mejor y mejor manera es crear un elemento y agregarlo a la bodyetiqueta. La segunda forma es obtener primero la innerHTMLpropiedad de bodyy agregarle código. Por ejemplo:

var b = document.getElementsByTagName('body');
b.innerHTML = b.innerHTML + "Your code";

3
En primer lugar, puede acceder al cuerpo de la página simplemente haciendo document.body, en segundo lugar, como mencioné antes, no reescribir toda la página solo para agregar un elemento.
Christian

-2

Aquí hay un truco muy rápido: digamos que quieres agregar la etiqueta p dentro de la etiqueta div.

<div>
<p><script>document.write(<variablename>)</script></p>
</div>

Y eso es.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.