Adding div element to body or document in JavaScript

Javascript

Javascript Problem Overview


I am creating a light box in pure JavaScript. For that I am making an overlay. I want to add this overlay to body but I also want to keep the content on the page. My current code adds the overlay div but it also removes the current contents in body. How to add div element and keep contents on body?

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

Javascript Solutions


Solution 1 - Javascript

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

Using jQuery

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

Solution 2 - Javascript

Try this out:-

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

Use

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

instead of

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

Edit:- Ideally you should use body.appendChild method instead of changing the innerHTML

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

Solution 3 - Javascript

Instead of replacing everything with innerHTML try:

document.body.appendChild(myExtraNode);

Solution 4 - Javascript

improving the post of @Peter T, by gathering all solutions together at one place.

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

Using XPath find the position of the Element in the DOM Tree and insert the specified text at a specified position to an XPath_Element. try this code over browser console.

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"]';
var childHTML = '<div id="Yash">Hi My name is <B>\"YASHWANTH\"</B></div>';
var position = 'beforeend';
insertHTML_ByXPath(xpath_DOMElement, position, childHTML);

Solution 5 - Javascript

The most underrated method is insertAdjacentElement. You can literally add your HTML using one single line.

document.body.insertAdjacentElement('beforeend', html)

Read about it here - https://developer.mozilla.org/en-US/docs/Web/API/Element/insertAdjacentElement

Solution 6 - Javascript

The modern way is to use ParentNode.append(), like so:

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

Solution 7 - Javascript

Try doing

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

Solution 8 - Javascript

You can make your div HTML code and set it directly into body(Or any element) with following code:

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

Solution 9 - Javascript

The best and better way is to create an element and append it to the body tag. Second way is to first get the innerHTML property of body and add code with it. For example:

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

Solution 10 - Javascript

Here's a really quick trick: Let's say you wanna add p tag inside div tag.

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

And that's it.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionOm3gaView Question on Stackoverflow
Solution 1 - JavascriptPeter T.View Answer on Stackoverflow
Solution 2 - JavascriptAditya SinghView Answer on Stackoverflow
Solution 3 - JavascriptJoakim Poromaa HelgerView Answer on Stackoverflow
Solution 4 - JavascriptYashView Answer on Stackoverflow
Solution 5 - JavascriptVibhor DubeView Answer on Stackoverflow
Solution 6 - JavascriptLuís RamalhoView Answer on Stackoverflow
Solution 7 - JavascriptCody NordenView Answer on Stackoverflow
Solution 8 - JavascriptYashar AliabbasiView Answer on Stackoverflow
Solution 9 - JavascriptSayanjyoti DasView Answer on Stackoverflow
Solution 10 - JavascriptPoussyView Answer on Stackoverflow