Добавление элемента div в тело или документ в JavaScript

145

Я создаю световой короб на чистом JavaScript. Для этого делаю накладку. Я хочу добавить этот оверлей в тело, но я также хочу сохранить контент на странице. Мой текущий код добавляет оверлейный div, но также удаляет текущее содержимое в теле. Как добавить элемент div и сохранить содержимое в теле?

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>';
}
Ом3га
источник
4
попробуйте добавить его, например: document.body.innerHTML = '<div style = "position: absolute; width: 100%; height: 100%; opacity: 0.3; z-index: 100; background: # 000;" > </div> '+ document.body.innerHTML;
Рики

Ответы:

169

Попробуйте это: -

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

Использовать

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

вместо того

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

Изменить: - В идеале вы должны использовать body.appendChildметод вместо изменения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);
Адитья Сингх
источник
20
Вы должны учитывать, что выполнение document.body.innerHTML = 'something' влечет за собой множество ненужных вычислений, потому что браузеру необходимо проанализировать строку 'something', а это занимает много времени на большой странице. Гораздо более производительный подход - создать новый элемент и прикрепить его к DOM. Проверьте это сравнение на jsperf: jsperf.com/innerhtml-vs-appendchild2
fegemo
15
Этот подход также будет иметь некоторые нежелательные побочные эффекты. Например, все связанные события дочерних элементов станут несвязанными, как только вы установите их innerHTMLзаново.
anoopelias
5
Это определенно неправильный ответ ... вопрос касается добавления элемента, а не перезаписи всей страницы, см. JPH для лучшей альтернативы.
Christian
4
-1. Это ужасный способ добиться этого. Если вы читаете это, не используйте это медленное и устаревшее решение. Посмотрите ответ @ peter-t
MacroMan
3
Это не только медленно, но и уничтожает более ранние элементы, поэтому любые прослушиватели событий, прикрепленные к странице ранее, теряются! Избегайте этого любой ценой. Вместо этого используйте appendChild.
Kranthi Kiran P
232

Использование 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);

Использование jQuery

$('body').append('<div style="position:absolute;width:100%;height:100%;opacity:0.3;z-index:100;background:#000;"></div>');
Питер Т.
источник
2
самая странная вещь. в худшем случае чистый javascript всегда был способом делать все, что я хотел.
Спенсер Уильямс
3
Это должен быть принятый ответ. Это единственный ответ, который говорит об этом правильно.
MacroMan
@MacroMan Даже версия jquery? Я использую jquery и тоже хотел бы сделать это правильно. (Просто чтобы убедиться, потому что его ответ jquery состоит только из одной строки и, похоже, не создает узел или что-то еще.)
felwithe
@felwithe Версия jQuery приемлема, но вы можете создать узел с нуля и применять стили по отдельности, если вам нужно больше ясности в коде.
MacroMan
appendChild()и insertBefore()придать еще большую гибкость в расположении вставляемого элемента
averasko
22

Вместо того, чтобы заменять все на innerHTML, попробуйте:

document.body.appendChild(myExtraNode);

Йоаким Поромаа Хельгер
источник
10
Обратите внимание, что вы можете добраться до тела, просто делая document.body.
Christian
Это лучшее решение.
Abhishek Sinha
12

улучшить пост @Peter T, собрав все решения в одном месте.

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

Используя XPathпоиск позиции элемента в дереве DOM и вставьте указанный текст в указанную позицию в XPath_Element. попробуйте этот код через консоль браузера.

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

Попробуйте сделать

document.body.innerHTML += '<div style="position:absolute;width:100%;height:100%;opacity:0.3;z-index:100;background:#000;"></div>'
Коди Норден
источник
2

Вы можете создать свой divHTML-код и установить его прямо в body(или любой элемент) с помощью следующего кода:

var divStr = '<div class="text-warning">Some html</div>';
document.getElementsByTagName('body')[0].innerHTML += divStr;
Яшар Алиаббаси
источник
самый лучший и простой способ. Благодарность!
Извините, IwontTell
2

Современный способ - использовать 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

Самый лучший и лучший способ - создать элемент и добавить его в bodyтег. Второй способ - сначала получить innerHTMLсвойство bodyи добавить к нему код. Например:

var b = document.getElementsByTagName('body');
b.innerHTML = b.innerHTML + "Your code";
Саянджйоти Дас
источник
3
Во-первых, вы можете добраться до тела страницы, просто выполнив document.body, во-вторых, как я уже упоминал ранее, не перезаписывайте всю страницу только для того, чтобы добавить элемент.
Christian
-2

Вот действительно быстрый трюк: допустим, вы хотите добавить тег p внутри тега div.

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

Вот и все.

Пусси
источник