176

我正在用纯 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>';
}
4

10 回答 10

263

使用 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>');
于 2013-04-01T12:03:22.560 回答
205

试试这个: -

http://jsfiddle.net/adioo7/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);
于 2013-04-01T09:43:33.563 回答
23

而不是用 innerHTML 替换所有内容:

document.body.appendChild(myExtraNode);

于 2016-11-04T10:47:24.313 回答
17

通过将所有解决方案集中在一个地方来改进@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"]';
var childHTML = '<div id="Yash">Hi My name is <B>\"YASHWANTH\"</B></div>';
var position = 'beforeend';
insertHTML_ByXPath(xpath_DOMElement, position, childHTML);
于 2015-11-12T11:04:18.670 回答
7

最被低估的方法是insertAdjacentElement。您可以使用一行字面上添加您的 HTML。

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

在这里阅读 - https://developer.mozilla.org/en-US/docs/Web/API/Element/insertAdjacentElement

于 2021-01-27T10:45:40.677 回答
5

现代方法是使用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);

于 2020-04-12T10:33:20.803 回答
2

尝试做

document.body.innerHTML += '<div style="position:absolute;width:100%;height:100%;opacity:0.3;z-index:100;background:#000;"></div>'
于 2013-04-01T09:41:16.360 回答
2

您可以使用以下代码制作divHTML 代码并将其直接设置为body(或任何元素):

var divStr = '<div class="text-warning">Some html</div>';
document.getElementsByTagName('body')[0].innerHTML += divStr;
于 2019-01-11T19:37:15.510 回答
0

最好和更好的方法是创建一个元素并将其附加到body标签。第二种方法是首先获取 的innerHTML属性body并使用它添加代码。例如:

var b = document.getElementsByTagName('body');
b.innerHTML = b.innerHTML + "Your code";
于 2016-03-23T15:56:41.913 回答
-3

这是一个非常快速的技巧:假设您想在 div 标签中添加 p 标签。

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

就是这样。

于 2019-11-02T10:24:10.517 回答