Aggiunta dell'elemento div al corpo o al documento in JavaScript


139

Sto creando un light box in puro JavaScript. Per questo sto facendo una sovrapposizione. Voglio aggiungere questo overlay al corpo, ma voglio anche mantenere il contenuto sulla pagina. Il mio codice corrente aggiunge il div overlay ma rimuove anche i contenuti correnti nel corpo. Come aggiungere l'elemento div e mantenere i contenuti sul corpo?

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>';
}

4
hai provato ad aggiungerlo come: document.body.innerHTML = '<div style = "position: absolute; larghezza: 100%; altezza: 100%; opacità: 0.3; indice z: 100; background: # 000;" > </ div> '+ document.body.innerHTML;
Ricky,

Risposte:


160

Prova questo: -

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

Uso

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

invece di

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

Modifica: - Idealmente dovresti usare il body.appendChildmetodo invece di cambiare ilinnerHTML

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
Devi considerare che fare document.body.innerHTML = 'qualcosa' comporta molti calcoli non necessari perché il browser deve analizzare la stringa 'qualcosa' e questo richiede molto in una grande pagina. Un approccio molto più performante è quello di creare il nuovo elemento e collegarlo al DOM. Controlla questo confronto su jsperf: jsperf.com/innerhtml-vs-appendchild2
fegemo

14
Questo approccio avrà anche alcuni effetti collaterali indesiderati. Ad esempio, tutti gli eventi associati sugli elementi figlio non verranno associati una volta impostati innerHTMLnuovamente.
anoopelias

5
Questa è sicuramente la risposta sbagliata ... la domanda si pone sull'aggiunta di un elemento, non sulla riscrittura dell'intera pagina, vedere JPH per una migliore alternativa.
Christian

4
-1. Questo è un modo terribile per raggiungere questo obiettivo. Se stai leggendo questo, non utilizzare questa soluzione lenta e datata. Guarda la risposta di @ peter-t
MacroMan,

3
Non solo è lento, ma distrugge gli elementi precedenti, quindi tutti gli ascoltatori di eventi allegati alla pagina precedente vanno persi! Evita di farlo a tutti i costi. Utilizzare invece appendChild.
Kranthi Kiran P,

223

Utilizzando 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);

Utilizzando jQuery

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

2
cosa più strana. nel peggiore dei casi, javascript puro è sempre stato il modo di fare tutto ciò che volevo fare.
Spencer Williams,

3
Questa dovrebbe essere la risposta accettata. È l'unica risposta che risponde in modo corretto.
MacroMan,

@MacroMan Anche la versione jquery? Sto usando jquery e vorrei farlo anche in questo modo. (Solo assicurandomi perché la sua risposta jquery è solo una riga e non sembra creare un nodo o altro.)
felwithe

@felwithe La versione jQuery è accettabile, ma potresti voler creare un nodo da zero e applicare gli stili singolarmente se hai bisogno di maggiore chiarezza nel tuo codice.
MacroMan

appendChild()e insertBefore()dare ancora più flessibilità sulla posizione dell'elemento da inserire
averasko


12

migliorare il posto di @Peter T, riunendo tutte le soluzioni in un unico posto.

Element.insertAdjacentHTML ()

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}";
}

Utilizzando XPathtrova la posizione dell'elemento nella struttura ad albero DOM e inserisci il testo specificato in una posizione specificata in un XPath_Element. prova questo codice sulla console del browser.

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

Prova a fare

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

2

Puoi creare il tuo divcodice HTML e impostarlo direttamente in body(o qualsiasi elemento) con il seguente codice:

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

il modo migliore e più semplice. Grazie!
Muhammad Ali,

1

Il modo moderno è usare ParentNode.append(), in questo modo:

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

Il modo migliore e migliore è creare un elemento e aggiungerlo al bodytag. Il secondo modo è prima ottenere la innerHTMLproprietà bodye aggiungere il codice con essa. Per esempio:

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

3
In primo luogo, puoi arrivare al corpo della pagina semplicemente facendo document.body, in secondo luogo, come ho già detto prima, non riscrivere l'intera pagina solo per aggiungere un elemento.
Christian

-2

Ecco un trucco davvero veloce: supponiamo che tu voglia aggiungere il tag p all'interno del tag div.

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

E questo è tutto.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.