Menambahkan elemen div ke badan atau dokumen dalam JavaScript

139

Saya membuat kotak cahaya di JavaScript murni. Untuk itu saya membuat overlay. Saya ingin menambahkan hamparan ini ke tubuh tetapi saya juga ingin menjaga konten di halaman. Kode saya saat ini menambahkan overlay div tetapi juga menghapus isi saat ini di tubuh. Bagaimana cara menambahkan elemen div dan menyimpan konten di badan?

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>';
}
Om3ga
sumber
4
apakah Anda mencoba menambahkannya seperti: document.body.innerHTML = '<div style = "posisi: absolut; lebar: 100%; tinggi: 100%; opacity: 0,3; z-indeks: 100; latar belakang: # 000;" > </div> '+ document.body.innerHTML;
Ricky

Jawaban:

159

Coba ini: -

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

Menggunakan

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

dari pada

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

Sunting: - Idealnya Anda harus menggunakan body.appendChildmetode alih-alih mengubahinnerHTML

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);
Aditya Singh
sumber
18
Anda perlu mempertimbangkan bahwa melakukan document.body.innerHTML = 'sesuatu' menimbulkan banyak perhitungan yang tidak perlu karena browser perlu mengurai string 'sesuatu' dan itu membutuhkan banyak dalam halaman besar. Pendekatan yang jauh lebih berkinerja adalah membuat elemen baru dan melampirkannya ke DOM. Periksa perbandingan ini di jsperf: jsperf.com/innerhtml-vs-appendchild2
fegemo
14
Pendekatan ini akan memiliki beberapa efek samping yang tidak diinginkan juga. Misalnya, semua acara terikat pada elemen anak akan menjadi tidak terikat setelah Anda mengatur innerHTMLkembali.
anoopelias
5
Ini jelas jawaban yang salah ... pertanyaan yang diajukan tentang menambahkan elemen, tidak menulis ulang seluruh halaman, lihat JPH untuk alternatif yang lebih baik.
Christian
4
-1. Ini adalah cara yang mengerikan untuk mencapai ini. Jika Anda membaca ini, jangan gunakan solusi lambat dan tanggal ini. Lihatlah jawabannya oleh @ peter-t
MacroMan
3
Tidak hanya ini lambat, tetapi menghancurkan elemen sebelumnya, sehingga setiap pendengar acara yang melekat pada halaman sebelumnya hilang! Hindari melakukan ini dengan cara apa pun. Gunakan appendChild sebagai gantinya.
Kranthi Kiran P
223

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

Menggunakan jQuery

$('body').append('<div style="position:absolute;width:100%;height:100%;opacity:0.3;z-index:100;background:#000;"></div>');
Peter T.
sumber
2
hal yang paling aneh. terburuk saya, javascript murni selalu menjadi cara untuk melakukan apa pun yang saya ingin lakukan.
Spencer Williams
3
Ini harus menjadi jawaban yang diterima. Ini adalah satu-satunya jawaban yang membahas hal ini dengan cara yang benar.
MacroMan
@ MacroMan Bahkan versi jquery? Saya menggunakan jquery dan juga ingin melakukannya dengan benar. (Hanya memastikan karena jawaban jquery-nya hanya satu baris dan sepertinya tidak membuat simpul atau apa pun.)
felwithe
@felwithe Versi jQuery dapat diterima, tetapi Anda mungkin ingin membuat simpul dari awal dan menerapkan gaya secara terpisah jika Anda memerlukan lebih banyak kejelasan dalam kode Anda.
MacroMan
appendChild()dan insertBefore()memberikan lebih banyak fleksibilitas pada lokasi elemen yang akan dimasukkan
averasko
21

Alih-alih mengganti semuanya dengan innerHTML coba:

document.body.appendChild(myExtraNode);

Joakim Poromaa Helger
sumber
10
Perhatikan bahwa Anda bisa sampai ke tubuh hanya dengan melakukan document.body.
Christian
Ini solusi yang lebih baik.
Abhishek Sinha
12

memperbaiki posisi @Peter T, dengan mengumpulkan semua solusi bersama di satu tempat.

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

Menggunakan XPathmenemukan posisi Elemen di Pohon DOM dan masukkan teks yang ditentukan pada posisi yang ditentukan ke XPath_Element. coba kode ini melalui konsol 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);
Yash
sumber
2

Coba lakukan

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

Anda dapat membuat divkode HTML dan mengaturnya langsung ke body(Atau elemen apa pun) dengan kode berikut:

var divStr = '<div class="text-warning">Some html</div>';
document.getElementsByTagName('body')[0].innerHTML += divStr;
Yashar Aliabbasi
sumber
cara terbaik dan termudah. Terima kasih!
Muhammad Ali
1

Cara modern adalah menggunakan ParentNode.append(), seperti:

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

Luís Ramalho
sumber
0

Cara terbaik dan lebih baik adalah membuat elemen dan menambahkannya ke bodytag. Cara kedua adalah pertama mendapatkan innerHTMLproperti bodydan menambahkan kode dengannya. Sebagai contoh:

var b = document.getElementsByTagName('body');
b.innerHTML = b.innerHTML + "Your code";
Sayanjyoti Das
sumber
3
Pertama, Anda dapat membuka badan halaman dengan hanya melakukan document.body, kedua seperti yang saya sebutkan sebelumnya, jangan menulis ulang seluruh halaman hanya untuk menambahkan elemen.
Christian
-2

Ini trik yang sangat cepat: Katakanlah Anda ingin menambahkan tag p di dalam tag div.

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

Dan itu saja.

Poussy
sumber