อะไรคือข้อแตกต่างระหว่าง jQuery ของ replaceWith () และ html ()


145

อะไรคือความแตกต่างระหว่างฟังก์ชั่น replaceWith () และ html () ของ jQuery เมื่อ HTML ถูกส่งเป็นพารามิเตอร์?


2
สิ่งนี้ช่วยฉัน! ฉันพยายามเปลี่ยนข้อความของป้ายกำกับแบบไดนามิกโดยใช้ jQuery และหัวข้อนี้ช่วยฉันได้อย่างแน่นอน ขอบคุณ!
HereToLearn_

คำตอบ:


289

ใช้รหัส HTML นี้:

<div id="mydiv">Hello World</div>

การทำ:

$('#mydiv').html('Aloha World');

จะส่งผลให้:

<div id="mydiv">Aloha World</div>

การทำ:

$('#mydiv').replaceWith('Aloha World');

จะส่งผลให้:

Aloha World

ดังนั้นhtml ()จะแทนที่เนื้อหาขององค์ประกอบในขณะที่replaceWith ()จะแทนที่องค์ประกอบที่แท้จริง


1
คำอธิบายที่ดี!
Luis Gouveia

31

replaceWith () จะแทนที่องค์ประกอบปัจจุบันในขณะที่ html () เพียงแค่แทนที่เนื้อหา

โปรดทราบว่า replaceWith () จะไม่ลบองค์ประกอบ แต่เพียงลบออกจาก DOM และส่งกลับมาให้คุณในคอลเลกชัน

ตัวอย่างสำหรับปีเตอร์: http://jsbin.com/ofirip/2


3
+1 มีประโยชน์มากที่จะจดบันทึกไว้ที่ replaceWith () ไม่ได้ลบองค์ประกอบจริงๆ ฉันไม่ได้คิดเรื่องนี้!
ปีเตอร์

2
มันเป็นความจริงมันยังคงมีอยู่ มันไม่ได้อยู่ใน DOM ดังนั้นคุณจะไม่เห็น แต่ก็ยังเป็น HTML ที่ถูกต้อง หลักฐาน: jsbin.com/ofirip/2
cgp

1
ใช่นี่เป็นเรื่องจริง ขอบคุณสำหรับการวางตัวอย่าง ฉันกำลังคิดที่จะลบมันออกจาก DOM (รวมถึงการเก็บขยะ) เป็นการลบจากมุมมองของฉัน แต่คุณถูกต้องทางเทคนิค ฉันจะลบ-1และหวังว่านี่จะเป็นประโยชน์สำหรับทุกคน :)
ปีเตอร์

1
ขอบคุณสำหรับโน้ต replaceWith () กลับองค์ประกอบเก่าเพียงแค่ให้ฉันบางแห้วแก้จุดบกพร่อง :(
Dain

2
ใช่ฉันต่อสู้มาแล้วอย่างน้อยครึ่งชั่วโมงตอนนี้ฉันเพิ่งรู้ว่าฟังก์ชั่นคืนองค์ประกอบที่ถูกแทนที่ฉันคาดว่ามันจะส่งคืนองค์ประกอบใหม่ด้วยรหัสดังนี้: var $form = $target.closest('tr').replaceWith(html) ปรากฎว่า$formมีองค์ประกอบก่อนที่จะเปลี่ยน ถอนหายใจ
Pawel Krakowiak

5

มีสองวิธีในการใช้ html () และ replaceWith () ฟังก์ชั่น Jquery

<div id="test_id">
   <p>My Content</p>
</div>

1. ) html () vs replaceWith ()

var html = $('#test_id p').html(); จะส่งคืน "เนื้อหาของฉัน"

แต่ var replaceWith = $('#test_id p').replaceWith();จะกลับวัตถุ DOM <p>My Content</p>ทั้ง


2. ) html ('value') vs replaceWith ('value')

$('#test_id p').html('<h1>H1 content</h1>'); จะให้คุณใส่ออกดังต่อไปนี้

<div id="test_id">
  <p><h1>H1 content</h1></p>
</div>

แต่ $('#test_id p').replaceWith('<h1>H1 content</h1>');จะทำให้คุณออกมาดังต่อไปนี้

<div id="test_id">
      <h1>H1 content</h1>
</div>

2

คำถามเก่า แต่อาจช่วยใครได้

มีความแตกต่างบางประการในการทำงานของฟังก์ชันเหล่านี้ใน Internet Explorer และ Chrome / Firefox หาก HTML ของคุณไม่ถูกต้อง

ทำความสะอาด HTML ของคุณและพวกเขาจะทำงานตามเอกสาร

(ไม่ปิด</center>ค่าใช้จ่ายฉันตอนเย็นของฉัน!)


6
นั่นเป็นเหตุผลที่คุณไม่ควรใช้ศูนย์อีกต่อไป : p
Romain Tribes

2

นอกจากนี้ยังอาจจะมีประโยชน์ที่จะรู้ว่านอกจากนี้ยังสามารถนำมาใช้แทน.empty().append() .html()ในมาตรฐานที่แสดงด้านล่างนี้จะเร็วกว่า แต่ถ้าคุณจำเป็นต้องเรียกใช้ฟังก์ชันนี้หลายครั้ง

ดู: https://jsperf.com/jquery-html-vs-empty-append-test

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