JavaScript'te gövdeye veya belgeye div öğesi ekleme


139

Saf JavaScript'te bir ışık kutusu oluşturuyorum. Bunun için bir kaplama yapıyorum. Bu kaplamayı gövdeye eklemek istiyorum ancak içeriği sayfada tutmak istiyorum. Geçerli kodum yer paylaşımı div'ı ekliyor, ancak aynı zamanda gövde içindeki geçerli içeriği de kaldırıyor. Div öğesi nasıl eklenir ve içeriği vücutta nasıl saklanır?

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
eklemeye çalıştınız mı: document.body.innerHTML = '<div style = "konum: mutlak; genişlik: 100%; yükseklik: 100%; opaklık: 0.3; z-endeksi: 100; arka plan: # 000;" > </ div> '+ document.body.innerHTML;
Ricky

Yanıtlar:


160

Şunu deneyin: -

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

kullanım

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

onun yerine

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

Düzenleme: - İdeal body.appendChildolarak değiştirmek yerine yöntemi kullanmalısınızinnerHTML

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
Document.body.innerHTML = 'bir şey' yapmanın gereksiz bir hesaplamada ortaya çıktığını düşünmelisiniz, çünkü tarayıcının 'bir şey' dizesini ayrıştırması gerekiyor ve bu büyük bir sayfada çok şey alıyor. Çok daha performanslı bir yaklaşım, yeni elemanı oluşturmak ve DOM'a bağlamaktır. Bu karşılaştırmayı jsperf'de kontrol edin: jsperf.com/innerhtml-vs-appendchild2
fegemo

14
Bu yaklaşımın bazı istenmeyen yan etkileri de olacaktır. Örneğin, innerHTMLyeniden ayarladığınızda alt öğelerdeki tüm ilişkili olaylar bağlanmamış olur .
anoopelias

5
Bu kesinlikle yanlış cevaptır ... soru, tüm sayfayı yeniden yazmamak için bir öğe eklemeyi soruyor, daha iyi bir alternatif için JPH'lere bakın.
Christian

4
-1. Bu, bunu başarmanın korkunç bir yoludur. Bunu okuyorsanız, bu yavaş ve tarihli çözümü kullanmayın. @ Peter-t tarafından verilen cevaba bak
MacroMan

3
Bu sadece yavaş değil, aynı zamanda önceki unsurları da yok eder, bu nedenle daha önce sayfaya eklenen tüm olay dinleyicileri kaybolur! Bunu pahasına yapmaktan kaçının. Bunun yerine appendChild kullanın.
Kranthi Kiran P

223

Javascript Kullanımı

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

JQuery kullanma

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

2
en tuhaf şey. en kötüsü, saf javascript her zaman yapmak istediğim her şeyi yapmanın yolu olmuştur.
Spencer Williams

3
Bu kabul edilen cevap olmalı. Bu konuda doğru cevap veren tek cevap bu.
MacroMan

@MacroMan Jquery sürümü bile mi? Ben jquery kullanıyorum ve düzgün şekilde bu şekilde yapmak istiyorum. (Sadece emin olun çünkü jquery cevabı sadece bir satırdır ve bir düğüm ya da herhangi bir şey yaratmış gibi görünmüyor.)
felwithe

@felwithe jQuery sürümü kabul edilebilir, ancak kodunuzda daha fazla netliğe ihtiyacınız varsa sıfırdan bir düğüm oluşturmak ve stilleri ayrı ayrı uygulamak isteyebilirsiniz.
MacroMan

appendChild()ve insertBefore()yerleştirilecek elemanın konumuna daha fazla esneklik kazandırın
averasko


12

tüm çözümleri tek bir yerde bir araya getirerek @Peter T görevini geliştirmek.

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

Kullanılması XPathDOM Ağacında Unsuru konumunu bulmak ve bir XPath_Element belirtilen bir pozisyonda belirtilen metin eklemek. bu kodu tarayıcı konsolu üzerinden deneyin.

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

Yapmayı dene

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

2

Eğer yapabilirsiniz divHTML kodu ve doğrudan ayarlayın bodyaşağıdaki kodla (Veya herhangi eleman):

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

en iyi ve en kolay yol. Teşekkürler!
Muhammed Ali

1

Modern yol şu şekilde kullanmaktır ParentNode.append():

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

En iyi ve daha iyi yol bir öğe oluşturmak ve onu bodyetikete eklemektir. İkinci yol ilk olarak innerHTMLözelliğini almak bodyve onunla kod eklemektir. Örneğin:

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

3
İlk olarak, daha document.bodyönce de belirttiğim gibi, sadece bir öğe eklemek için tüm sayfayı yeniden yazmayın, sayfa gövdesine ulaşabilirsiniz .
Christian

-2

İşte size hızlı bir numara: diyelim ki div etiketinin içine p etiketi eklemek istiyorsunuz.

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

Ve bu kadar.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.