วิธีต่อท้ายสตริง HTML นี้
var str = '<p>Just some <span>text</span> here</p>';
ไปยัง DIV ด้วย ID 'test'
ซึ่งอยู่ใน DOM?
(Btw div.innerHTML += str;
ไม่เป็นที่ยอมรับ)
วิธีต่อท้ายสตริง HTML นี้
var str = '<p>Just some <span>text</span> here</p>';
ไปยัง DIV ด้วย ID 'test'
ซึ่งอยู่ใน DOM?
(Btw div.innerHTML += str;
ไม่เป็นที่ยอมรับ)
คำตอบ:
ใช้insertAdjacentHTML
หากมีหรือใช้ทางเลือกบางประเภท insertAdjacentHTML รับการสนับสนุนในเบราว์เซอร์ในปัจจุบันทั้งหมด
div.insertAdjacentHTML( 'beforeend', str );
การสาธิตสด: http://jsfiddle.net/euQ5n/
insertAdjacentHTML
เร็วกว่าการต่อท้ายinnerHTML
เนื่องจากinsertAdjacentHTML
ไม่ทำให้เป็นอนุกรมและแยกย่อยที่มีอยู่ขององค์ประกอบ
insertAdjacentHTML
รักษาค่าขององค์ประกอบฟอร์มที่เปลี่ยนแปลงในขณะที่การต่อท้ายเพื่อinnerHTML
สร้างองค์ประกอบใหม่และสูญเสียบริบทของฟอร์มทั้งหมด
เป็นที่ยอมรับหรือไม่?
var child = document.createElement('div');
child.innerHTML = str;
child = child.firstChild;
document.getElementById('test').appendChild(child);
แต่ , คำตอบของนีลเป็นทางออกที่ดีกว่า
innerHTML
หรือไม่?
insertAdjacentHTML
.
AppendChild
(E) เร็วกว่าโซลูชันอื่น ๆ บน Chrome และ Safari มากกว่า 2 เท่าinsertAdjacentHTML
(F) เร็วกว่าใน Firefox innerHTML=
(B) (อย่าสับสนกับ+=
(A)) เป็นวิธีที่รวดเร็วที่สองในเบราว์เซอร์และมันก็เป็นประโยชน์มากขึ้นกว่าอีและเอฟ
ตั้งค่าสภาพแวดล้อม (2019.07.10) MacOs High Sierra 10.13.4 บน Chrome 75.0.3770 (64 บิต), Safari 11.1.0 (13604.5.6), Firefox 67.0.0 (64 บิต)
คุณสามารถเล่นการทดสอบซ้ำในเครื่องของคุณได้ที่นี่
ความคิดที่จะใช้ในองค์ประกอบตัวกลางและจากนั้นย้ายทั้งหมดของโหนดลูกของตนเพื่อที่คุณต้องการจริงๆพวกเขาผ่านทางinnerHTML
appendChild
var target = document.getElementById('test');
var str = '<p>Just some <span>text</span> here</p>';
var temp = document.createElement('div');
temp.innerHTML = str;
while (temp.firstChild) {
target.appendChild(temp.firstChild);
}
วิธีนี้จะหลีกเลี่ยงการล้างตัวจัดการเหตุการณ์ใด ๆ ที่เปิดอยู่div#test
แต่ยังช่วยให้คุณสามารถต่อท้ายสตริง HTML ได้
insertAdjacentHTML
วิธีที่ถูกต้องคือการใช้ ใน Firefox ก่อนหน้า 8 คุณสามารถกลับไปใช้งานได้Range.createContextualFragment
หากstr
ไม่มีscript
แท็ก
หากคุณstr
มีscript
แท็กคุณจะต้องลบscript
องค์ประกอบออกจากส่วนที่ส่งคืนcreateContextualFragment
ก่อนที่จะแทรกส่วน มิฉะนั้นสคริปต์จะทำงาน ( insertAdjacentHTML
ทำเครื่องหมายว่าสคริปต์ไม่สามารถเรียกใช้งานได้)
createContextualFragment
ขอขอบคุณสำหรับการกล่าวขวัญ ฉันกำลังค้นหาวิธีสร้าง html ที่มีสคริปต์ให้ทำงานก็ต่อเมื่อผู้ใช้ยินยอมที่จะตั้งค่าคุกกี้
แฮ็คด่วน:
<script>
document.children[0].innerHTML="<h1>QUICK_HACK</h1>";
</script>
ใช้กรณี :
1: บันทึกเป็นไฟล์. html และเรียกใช้ใน chrome หรือ firefox หรือ edge (IE เคยชิน)
2: ใช้ในhttp://js.do
ในการดำเนินการ: http://js.do/HeavyMetalCookies/quick_hack
แยกย่อยด้วยความคิดเห็น:
<script>
//: The message "QUICK_HACK"
//: wrapped in a header #1 tag.
var text = "<h1>QUICK_HACK</h1>";
//: It's a quick hack, so I don't
//: care where it goes on the document,
//: just as long as I can see it.
//: Since I am doing this quick hack in
//: an empty file or scratchpad,
//: it should be visible.
var child = document.children[0];
//: Set the html content of your child
//: to the message you want to see on screen.
child.innerHTML = text;
</script>
เหตุผลที่ฉันโพสต์:
JS.do มีสองสิ่งที่ต้องมี:
แต่ไม่แสดงข้อความ console.log มาที่นี่เพื่อหาวิธีแก้ปัญหาอย่างรวดเร็ว ฉันแค่อยากเห็นผลลัพธ์ของโค้ด scratchpad สองสามบรรทัดวิธีแก้ปัญหาอื่น ๆ ใช้งานได้มากเกินไป
เหตุใดจึงไม่เป็นที่ยอมรับ
document.getElementById('test').innerHTML += str
คงเป็นวิธีการทำตามตำรา
#test
ว่า ที่ไม่พึงปรารถนาโดยทั่วไป
สิ่งนี้สามารถแก้ได้
document.getElementById("list-input-email").insertAdjacentHTML('beforeend', '<div class=""><input type="text" name="" value="" class="" /></div>');
InnerHTML ล้างข้อมูลทั้งหมดเช่นเหตุการณ์สำหรับโหนดที่มีอยู่
ต่อท้ายเด็กด้วย firstChild เพิ่มลูกคนแรกเท่านั้นใน innerHTML ตัวอย่างเช่นหากเราต้องต่อท้าย:
<p>text1</p><p>text2</p>
เฉพาะ text1 เท่านั้นที่จะปรากฏขึ้น
แล้วสิ่งนี้:
เพิ่มแท็กพิเศษใน innerHTML โดยต่อท้ายเด็กจากนั้นแก้ไข outerHTML โดยการลบแท็กที่เราสร้างขึ้น ไม่รู้ว่ามันฉลาดแค่ไหน แต่มันใช้ได้สำหรับฉันหรือคุณอาจเปลี่ยน outerHTML เป็น innerHTML เพื่อที่จะได้ไม่ต้องใช้ function replace
function append(element, str)
{
var child = document.createElement('someshittyuniquetag');
child.innerHTML = str;
element.appendChild(child);
child.outerHTML = child.outerHTML.replace(/<\/?someshittyuniquetag>/, '');
// or Even child.outerHTML = child.innerHTML
}
<div id="testit">
This text is inside the div
<button onclick="append(document.getElementById('testit'), '<button>dadasasdas</button>')">To div</button>
<button onclick="append(this, 'some text')">to this</button>
</div>
สั้นที่สุด - 18 ตัวอักษร (อย่าสับสน+=
(พูดถึงโดย OP) มี=
รายละเอียดเพิ่มเติมที่นี่ )
test.innerHTML=str
innerHTML
ใส่สตริงลงในองค์ประกอบ (แทนที่ชายด์ทั้งหมด) ในขณะที่insertAdjacentHTML
ใส่ (1) ก่อนองค์ประกอบ (2) หลังองค์ประกอบ (3) ภายในองค์ประกอบก่อนลูกคนแรกหรือ (4) ภายในองค์ประกอบหลังลูกคนสุดท้าย