在JavaScript中将div元素添加到正文或文档


139

我正在用纯JavaScript创建灯箱。为此,我正在覆盖。我想将此叠加层添加到正文,但我也想将内容保留在页面上。我当前的代码添加了overlay 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
您是否尝试将其附加为:document.body.innerHTML ='<div style =“ position:absolute; width:100%; height:100%; opacity:0.3; z-index:100; background:#000;” > </ div>'+ document.body.innerHTML;
Ricky

Answers:


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 ='something'会引起很多不必要的计算,因为浏览器需要解析'something'字符串,这在一个大页面中会花费很多。一种性能更高的方法是创建新元素并将其附加到DOM。在jsperf上检查以下比较结果:jsperf.com/innerhtml-vs-appendchild2
fegemo 2015年

14
这种方法也会有一些不良的副作用。例如,innerHTML重新设置后,子元素上的所有绑定事件将变为未绑定。
anoopelias 2015年

5
这绝对是错误的答案...问题询问有关添加元素而不是重写整个页面的问题,请参见JPH以获得更好的选择。
基督教徒

4
-1。这是实现这一目标的可怕方法。如果您正在阅读本文,请不要使用这种过时的解决方案。看看@ peter-t的答案
MacroMan '17

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,也想通过这种方式正确地进行操作。(只需确定,因为他的jquery答案只有一行,而且似乎没有创建节点或其他任何东西。)

@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

您可以使用以下代码制作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

这是一个非常简单的技巧:假设您想在div标签内添加p标签。

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

就是这样。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.