การเพิ่มองค์ประกอบ div ให้กับเนื้อหาหรือเอกสารใน JavaScript


139

ฉันกำลังสร้างกล่องไฟในจาวาสคริปต์ที่บริสุทธิ์ สำหรับสิ่งที่ฉันทำซ้อนทับ ฉันต้องการเพิ่มการซ้อนทับนี้ลงในเนื้อความ แต่ฉันต้องการเก็บเนื้อหาไว้ในหน้าด้วย รหัสปัจจุบันของฉันเพิ่ม 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 = "ตำแหน่ง: สัมบูรณ์ความกว้าง: 100% ความสูง: 100% ความทึบ: 0.3; ดัชนี z: 100 พื้นหลัง: # 000;" > </ div> '+ document.body.innerHTML;
Ricky

คำตอบ:


160

ลองใช้ดู: -

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ใหม่
anoopelias

5
นี่เป็นคำตอบที่ผิดแน่นอน ... คำถามถามเกี่ยวกับการเพิ่มองค์ประกอบไม่ใช่เขียนทั้งหน้าใหม่ดู JPH เพื่อหาทางเลือกที่ดีกว่า
Christian

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
สิ่งที่แปลกประหลาด จาวาสคริปต์ที่บริสุทธิ์ที่สุดของฉันเป็นวิธีในการทำสิ่งที่ฉันอยากทำ
Spencer Williams

3
นี่ควรเป็นคำตอบที่ยอมรับได้ มันเป็นคำตอบเดียวที่เกี่ยวกับเรื่องนี้ในวิธีที่ถูกต้อง
MacroMan

@MacroMan แม้แต่รุ่น jquery? ฉันใช้ jQuery และต้องการทำอย่างนั้นเช่นกัน (เพียงการทำให้แน่ใจว่าเพราะคำตอบ jQuery ของเขาเป็นเพียงหนึ่งบรรทัดและดูเหมือนจะไม่สร้างโหนดหรืออะไร.)
felwithe

@felwithe รุ่น jQuery เป็นที่ยอมรับ แต่คุณอาจต้องการสร้างโหนดจากศูนย์และใช้สไตล์เป็นรายบุคคลหากคุณต้องการความชัดเจนมากขึ้นในรหัสของคุณ
MacroMan

appendChild()และinsertBefore()ให้ความยืดหยุ่นมากยิ่งขึ้นกับตำแหน่งขององค์ประกอบที่จะแทรก
เฉลี่ย

21

แทนที่จะลองเปลี่ยนทุกอย่างด้วย innerHTML:

document.body.appendChild(myExtraNode);


10
document.bodyโปรดทราบว่าคุณจะได้รับให้กับร่างกายได้ง่ายๆโดยการทำ
Christian

นี่เป็นทางออกที่ดีกว่า
Abhishek Sinha

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หาตำแหน่งขององค์ประกอบใน Tree 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

คุณสามารถสร้างdivโค้ด HTML ของคุณและตั้งเป็นโดยตรง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อย่างที่สองที่ฉันพูดก่อนหน้านี้อย่าเขียนทั้งหน้าใหม่เพื่อผนวกองค์ประกอบ
Christian

-2

นี่เป็นเคล็ดลับสั้น ๆ : สมมติว่าคุณต้องการเพิ่มแท็ก p ภายในแท็ก div

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

และนั่นคือมัน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.