Thêm phần tử div vào phần thân hoặc tài liệu trong JavaScript


139

Tôi đang tạo một hộp đèn trong JavaScript thuần túy. Cho rằng tôi đang làm một lớp phủ. Tôi muốn thêm lớp phủ này vào cơ thể nhưng tôi cũng muốn giữ nội dung trên trang. Mã hiện tại của tôi thêm div lớp phủ nhưng nó cũng loại bỏ nội dung hiện tại trong cơ thể. Làm thế nào để thêm phần tử div và giữ nội dung trên cơ thể?

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
bạn có thử nối nó như: document.body.innerHTML = '<div style = "vị trí: tuyệt đối; chiều rộng: 100%; chiều cao: 100%; độ mờ: 0,3; z-index: 100; nền: # 000;" > </ div> '+ document.body.innerHTML;
Ricky

Câu trả lời:


159

Thử thứ này đi:-

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

Sử dụng

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

thay vì

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

Chỉnh sửa: - Tốt nhất bạn nên sử dụng body.appendChildphương pháp thay vì thay đổiinnerHTML

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
Bạn cần xem xét việc thực hiện document.body.innerHTML = 'cái gì đó' phát sinh rất nhiều tính toán không cần thiết vì trình duyệt cần phân tích chuỗi 'cái gì đó' và điều đó chiếm rất nhiều trong một trang lớn. Một cách tiếp cận hiệu quả hơn nhiều là tạo phần tử mới và gắn nó vào DOM. Kiểm tra sự so sánh này trên jsperf: jsperf.com/innerhtml-vs-appendchild2
fegemo

14
Cách tiếp cận này cũng sẽ có một số tác dụng phụ không mong muốn. Ví dụ: tất cả các sự kiện bị ràng buộc trên các phần tử con sẽ trở nên không liên kết khi bạn đặt trước innerHTML.
vật phù du

5
Đây chắc chắn là câu trả lời sai ... câu hỏi hỏi về việc thêm một yếu tố, không viết lại toàn bộ trang, xem JPH's để có giải pháp thay thế tốt hơn.
Christian

4
-1. Đây là một cách khủng khiếp để đạt được điều này. Nếu bạn đang đọc nó, đừng sử dụng giải pháp chậm và lỗi thời này. Hãy xem câu trả lời của @ peter-t
MacroMan

3
Điều này không chỉ chậm, mà còn phá hủy các yếu tố trước đó, vì vậy bất kỳ người nghe sự kiện nào được đính kèm trên trang trước đó đều bị mất! Tránh làm điều này bằng mọi giá. Sử dụng appendChild thay thế.
Kranthi Kiran P

223

Sử dụng 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);

Sử dụng jQuery

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

2
điều kỳ lạ nhất tồi tệ nhất, javascript thuần túy luôn là cách để làm bất cứ điều gì tôi muốn làm.
Spencer Williams

3
Đây phải là câu trả lời được chấp nhận. Đó là câu trả lời duy nhất đi về điều này theo cách chính xác.
Macroman

@MacroMan Ngay cả phiên bản jquery? Tôi đang sử dụng jquery và cũng muốn làm điều đó đúng cách. (Chỉ cần chắc chắn vì câu trả lời jquery của anh ta chỉ có một dòng và dường như không tạo ra một nút hoặc bất cứ điều gì.)
felwithe

@felwithe Phiên bản jQuery có thể chấp nhận được, nhưng bạn có thể muốn tạo một nút từ đầu và áp dụng các kiểu riêng lẻ nếu bạn cần rõ ràng hơn trong mã của mình.
Macroman

appendChild()insertBefore()cung cấp sự linh hoạt hơn nữa về vị trí của phần tử được chèn
averasko

21

Thay vì thay thế mọi thứ bằng InternalHTML, hãy thử:

document.body.appendChild(myExtraNode);


10
Lưu ý rằng bạn có thể đến cơ thể chỉ bằng cách làm document.body.
Christian

Đây là một giải pháp tốt hơn.
Abhishek Sinha

12

cải thiện bài đăng của @Peter T, bằng cách tập hợp tất cả các giải pháp lại với nhau tại một nơi.

Element.insertAdjiềnHTML ()

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

Sử dụng XPathtìm vị trí của Phần tử trong Cây DOM và chèn văn bản đã chỉ định vào vị trí đã chỉ định vào XPath_Euity. thử mã này trên bảng điều khiển trình duyệt.

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

Hãy thử làm

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

2

Bạn có thể tạo divmã HTML của mình và đặt mã trực tiếp vào body(Hoặc bất kỳ yếu tố nào) với mã sau:

var divStr = '<div class="text-warning">Some html</div>';
document.getElementsByTagName('body')[0].innerHTML += divStr;

cách tốt nhất và dễ nhất Cảm ơn!
Muhammad Ali

1

Cách hiện đại là sử dụng ParentNode.append(), như vậy:

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

Cách tốt nhất và tốt hơn là tạo một yếu tố và gắn nó vào bodythẻ. Cách thứ hai là trước tiên lấy innerHTMLtài sản của bodyvà thêm mã với nó. Ví dụ:

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

3
Thứ nhất, bạn có thể truy cập vào phần thân trang bằng cách thực hiện đơn giản document.body, thứ hai như tôi đã đề cập trước đó, không viết lại toàn bộ trang chỉ để nối thêm một phần tử.
Christian

-2

Đây là một mẹo thực sự nhanh chóng: Giả sử bạn muốn thêm thẻ p vào thẻ div.

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

Và đó là nó.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.