Додавання елемента div до тіла або документа в JavaScript


139

Я створюю світлове поле в чистому JavaScript. Для цього я роблю накладку. Я хочу додати цю накладку до тіла, але я також хочу зберегти вміст на сторінці. Мій поточний код додає дію накладання, але він також видаляє поточний вміст у тілі. Як додати елемент 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>';
}

4
чи намагаєтесь ви додати його так: document.body.innerHTML = '<div style = "позиція: абсолютна; ширина: 100%; висота: 100%; непрозорість: 0,3; z-індекс: 100; фон: # 000;" > </div> '+ document.body.innerHTML;
Рікі

Відповіді:


159

Спробуйте це: -

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

18
Вам потрібно врахувати, що виконання document.body.innerHTML = "щось" проводиться в багатьох непотрібних обчисленнях, оскільки браузер повинен проаналізувати рядок "щось", і це займе багато на великій сторінці. Набагато ефективніший підхід - створити новий елемент і приєднати його до DOM. Перевірте це порівняння на jsperf: jsperf.com/innerhtml-vs-appendchild2
fegemo

14
Цей підхід матиме і небажані побічні ефекти. Наприклад, усі пов'язані події на дочірніх елементах стануть незв'язаними, коли ви innerHTMLзнову встановите їх .
аноопелія

5
Це, безумовно, неправильна відповідь ... питання задає питання про додавання елемента, а не переписування всієї сторінки, див. JPH для кращої альтернативи.
Крістіан

4
-1. Це жахливий спосіб досягти цього. Якщо ви це читаєте, не використовуйте це повільне і датоване рішення. Подивіться на відповідь @ peter-t
MacroMan

3
Це не тільки повільно, але знищує і більш ранні елементи, тому будь-які слухачі подій, приєднані до сторінки раніше, втрачаються! Уникайте цього робити будь-якою ціною. Використовуйте замість appendChild.
Kranthi Kiran P

223

Використання 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 і хотів би зробити це належним чином і таким чином. (Просто переконайтесь, що його відповідь на запитання - це лише один рядок і, здається, не створює вузол чи що-небудь інше.)
Felwithe

@felwithe Версія jQuery прийнятна, але ви, можливо, захочете створити вузол з нуля та застосувати стилі індивідуально, якщо вам потрібна більша чіткість у вашому коді.
MacroMan

appendChild()і insertBefore()надайте ще більшу гнучкість розташуванню елемента, який потрібно вставити
averasko


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;

найкращий і найпростіший спосіб. Дякую!
Мухаммед Алі


0

Найкращий і кращий спосіб - створити елемент і додати його до bodyтегу. Другий спосіб - спочатку отримати innerHTMLвластивість bodyі додати до нього код. Наприклад:

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

3
По-перше, ви можете потрапити на тіло сторінки, просто зробивши це document.body, по-друге, як я вже згадував, не переписуйте всю сторінку просто для додавання елемента.
Крістіан

-2

Ось справді швидкий трюк: Скажімо, ви хочете додати p тег всередині тегу div.

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

І це все.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.