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

Om3*_*3ga 129 javascript

我正在用纯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>';
}
Run Code Online (Sandbox Code Playgroud)

Pet*_* T. 214

使用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);
Run Code Online (Sandbox Code Playgroud)

使用jQuery

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

  • 最奇怪的事情。在我最糟糕的情况下,纯 javascript 一直是做任何我想做的事情的方式。 (2认同)
  • 这应该是公认的答案。这是以正确的方式解决此问题的唯一答案。 (2认同)

Adi*_*ngh 142

试试这个: -

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>';
Run Code Online (Sandbox Code Playgroud)

代替

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

编辑: - 理想情况下,您应该使用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);
Run Code Online (Sandbox Code Playgroud)

  • 您需要考虑执行document.body.innerHTML ='something'会导致大量不必要的计算,因为浏览器需要解析'something'字符串并且在大页面中占用很多.一种更高效的方法是创建新元素并将其附加到DOM.检查jsperf上的这个比较:http://jsperf.com/innerhtml-vs-appendchild2 (16认同)
  • 这种方法也会产生一些不必要的副作用.例如,一旦重新设置`innerHTML`,子元素上的所有绑定事件都将变为未绑定. (12认同)
  • 这绝对是错误的答案......问题是关于添加元素,而不是重写整个页面,请参阅JPH以获得更好的替代方案. (5认同)
  • -1.这是实现这一目标的可怕方法.如果您正在阅读本文,请不要使用这个缓慢且过时的解决方案.看看@ peter-t的答案 (4认同)
  • 这不仅速度慢,而且还会破坏早期的元素,因此之前附加到页面的任何事件侦听器都会丢失!不惜一切代价避免这样做.请改用appendChild. (3认同)

Joa*_*ger 18

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

document.body.appendChild(myExtraNode);

  • 请注意,只需通过`document.body`就可以到达身体. (10认同)

Yas*_*ash 11

通过在一个地方收集所有解决方案来改进@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}";
}
Run Code Online (Sandbox Code Playgroud)

使用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);
Run Code Online (Sandbox Code Playgroud)


Vib*_*ube 11

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

document.body.insertAdjacentElement('beforeend', html)
Run Code Online (Sandbox Code Playgroud)

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


Luí*_*lho 8

现代方法是使用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);
Run Code Online (Sandbox Code Playgroud)