อะไรคือความแตกต่างระหว่าง text () และ html () ใน jQuery?
$("#div").html('<a href="example.html">Link</a><b>hello</b>');
VS
$("#div").text('<a href="example.html">Link</a><b>hello</b>');
อะไรคือความแตกต่างระหว่าง text () และ html () ใน jQuery?
$("#div").html('<a href="example.html">Link</a><b>hello</b>');
VS
$("#div").text('<a href="example.html">Link</a><b>hello</b>');
คำตอบ:
ฉันคิดว่าความแตกต่างใกล้จะอธิบายได้เอง และมันก็เป็นสิ่งสำคัญที่จะทดสอบ
jQuery.html()ปฏิบัติต่อสายอักขระเป็น HTML jQuery.text()ถือว่าเนื้อหาเป็นข้อความ
<html>
<head>
<title>Test Page</title>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
<script type="text/javascript">
$(function(){
$("#div1").html('<a href="example.html">Link</a><b>hello</b>');
$("#div2").text('<a href="example.html">Link</a><b>hello</b>');
});
</script>
</head>
<body>
<div id="div1"></div>
<div id="div2"></div>
</body>
</html>
ความแตกต่างที่อาจไม่ชัดเจนดังนั้นอธิบายไว้ในเอกสารประกอบ jQuery API
ในเอกสารประกอบสำหรับ. html () :
.html()เป็นวิธีการที่ไม่สามารถใช้ได้ในเอกสาร XML
และในเอกสารประกอบสำหรับ. text () :
ต่างจาก
.html()วิธีการที่.text()สามารถใช้ได้ทั้งในเอกสาร XML และ HTML
$(function() {
$("#div1").html('<a href="example.html">Link</a><b>hello</b>');
$("#div2").text('<a href="example.html">Link</a><b>hello</b>');
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
<div id="div1"></div>
<div id="div2"></div>
((โปรดอัปเดตหากจำเป็นคำตอบนี้เป็น Wiki))
.text()หรือ.html()?คำตอบ: .html()เร็วกว่า! ดูที่นี่ "ชุดทดสอบพฤติกรรม" สำหรับคำถามทั้งหมด
ดังนั้นโดยสรุปหากคุณมี "ข้อความเท่านั้น" ใช้html()วิธีการ
หมายเหตุ:ไม่เข้าท่าใช่ไหม โปรดจำไว้ว่า.html()ฟังก์ชั่นเป็นเพียง wrapper to .innerHTMLแต่ใน.text()ฟังก์ชั่น jQuery เพิ่ม"filter filter"และตัวกรองนี้ใช้เวลาโดยธรรมชาติ
ตกลงถ้าคุณต้องการประสิทธิภาพจริงๆ ... ใช้ Javascript แท้ๆเพื่อเข้าถึงnodeValueคุณสมบัติแทนที่ข้อความโดยตรง ข้อสรุปมาตรฐาน:
.html()คือ ~ 2x .text()เร็วกว่า.innerHTMLเป็น ~ 3x .html()เร็วกว่า.nodeValueเป็น ~ 50x เร็วกว่า.html()~ 100x กว่า.text()และ ~ 20x .innerHTMLกว่าPS: .textContentคุณสมบัติถูกนำมาใช้กับ DOM-Level-3 .nodeValueคือ DOM-Level-2 และเร็วกว่า (!)
// Using jQuery:
simplecron.restart(); for (var i=1; i<3000; i++)
$("#work").html('BENCHMARK WORK');
var ht = simplecron.duration();
simplecron.restart(); for (var i=1; i<3000; i++)
$("#work").text('BENCHMARK WORK');
alert("JQuery (3000x): \nhtml="+ht+"\ntext="+simplecron.duration());
// Using pure JavaScript only:
simplecron.restart(); for (var i=1; i<3000; i++)
document.getElementById('work').innerHTML = 'BENCHMARK WORK';
ht = simplecron.duration();
simplecron.restart(); for (var i=1; i<3000; i++)
document.getElementById('work').nodeValue = 'BENCHMARK WORK';
alert("Pure JS (3000x):\ninnerHTML="+ht+"\nnodeValue="+simplecron.duration());
nodeValueคุณสมบัติมันจะแปลง ">" เป็น "& lt;" ฯลฯ
.text()ดูเหมือนว่าจะเร็วกว่า ~ 7x .html()) รหัสที่มา: codepen.io/damhonglinh/pen/vGpQEO ฉันทดสอบด้วยองค์ประกอบ 1500 ชิ้น .html()ใช้เวลา ~ 220ms และ.text()ใช้เวลา ~ 30ms
ตัวอย่างแรกจริงจะฝัง HTML ในdivขณะที่ตัวอย่างที่สองจะหลบหนีข้อความโดยใช้วิธีการแทนที่ตัวอักษรองค์ประกอบที่เกี่ยวข้องกับการที่สอดคล้องกันของพวกเขาหน่วยงานที่ตัวอักษรเพื่อให้แสดงตัวอักษร (เช่น HTML จะแสดงไม่ได้แสดง)
.text()ฟังก์ชั่นทั้งหมดจะถูกแทนที่ด้วย< <ดังนั้นด้วย.html()เบราว์เซอร์จะเห็นลิงก์และข้อความตัวหนาบางส่วน.text()เบราว์เซอร์จะเห็นทุกอย่างเป็นข้อความและไม่สร้างลิงก์หรือข้อความตัวหนา
text()วิธีนิติบุคคลหนี HTML ใด ๆ ที่จะผ่านเข้าสู่มัน ใช้text()เมื่อคุณต้องการแทรกรหัส HTML ที่จะปรากฏแก่ผู้ที่ดูหน้า
ในทางเทคนิคตัวอย่างที่สองของคุณผลิต:
<a href="example.html">Link</a><b>hello</b>
ซึ่งจะแสดงผลในเบราว์เซอร์เป็น:
<a href="example.html">Link</a><b>hello</b>
ตัวอย่างแรกของคุณจะแสดงผลเป็นลิงก์จริงและเป็นข้อความตัวหนา
ที่จริงแล้วทั้งสองมีลักษณะค่อนข้างคล้ายกัน แต่แตกต่างกันมากขึ้นอยู่กับการใช้งานหรือความตั้งใจของคุณในสิ่งที่คุณต้องการบรรลุ
.html()เพื่อดำเนินการบนภาชนะที่มีองค์ประกอบ HTML.text()เพื่อแก้ไขข้อความองค์ประกอบมักจะมีแท็กเปิดและปิดแยกต่างหาก.text() เมธอดไม่สามารถใช้กับอินพุตหรือสคริปต์ของฟอร์ม
.val() สำหรับองค์ประกอบอินพุตหรือ textarea.html() สำหรับค่าขององค์ประกอบสคริปต์การรับเนื้อหา html จาก.text()จะแปลงแท็ก html เป็นเอนทิตี html
.text() สามารถใช้ได้ทั้งในเอกสาร XML และ HTML.html() สำหรับเอกสาร html เท่านั้นตรวจสอบตัวอย่างนี้บน jsfiddle เพื่อดูความแตกต่างในการทำงาน
แปลกที่ไม่มีใครพูดถึงประโยชน์การป้องกันการเขียนสคริปต์ข้ามไซต์.text()มากกว่า.html()(แม้ว่าคนอื่น ๆ เพิ่งพูดถึงว่า.text()หนีข้อมูล)
ขอแนะนำให้ใช้เสมอ.text()เมื่อคุณต้องการอัปเดตข้อมูลใน DOM ซึ่งเป็นเพียงข้อมูล / ข้อความเพื่อให้ผู้ใช้เห็น
.html() ส่วนใหญ่ควรใช้เพื่อรับเนื้อหา HTML ภายใน div
ใช้. text (…) เมื่อคุณต้องการแสดงค่าเป็นข้อความแบบง่าย
ใช้. html (…) เมื่อคุณต้องการแสดงค่าเป็นข้อความที่จัดรูปแบบ html (หรือเนื้อหา HTML)
แน่นอนคุณควรใช้. text (... )เมื่อคุณไม่แน่ใจว่าข้อความของคุณ (เช่นมาจากการควบคุมอินพุต) ไม่มีอักขระ / แท็กที่มีความหมายพิเศษใน HTML นี่คือสิ่งที่สำคัญจริงๆเพราะอาจส่งผลในข้อความจะไม่แสดงอย่างถูกต้อง แต่ก็ยังอาจก่อให้เกิดที่JS ที่ไม่พึงประสงค์สคริปต์ตัวอย่างข้อมูล (เช่นมาจากการป้อนข้อมูลของผู้ใช้อื่น) จะเปิดใช้งาน
โดยพื้นฐานแล้ว $ ("# div"). html ใช้ element.innerHTML เพื่อตั้งเนื้อหาและ $ ("# div") ข้อความ (อาจ) ใช้ element.textContent
http://docs.jquery.com/Attributes/html :
Set the html contents of every matched element
http://docs.jquery.com/Attributes/text :
Similar to html(), but escapes HTML (replace "<" and ">" with their HTML
entities).
$ ('. div'). html (val)จะตั้งค่า HTML ขององค์ประกอบที่เลือกทั้งหมด$ ('. div'). text (val)จะตั้งค่าข้อความขององค์ประกอบที่เลือกทั้งหมด
API เอกสารสำหรับ jQuery.text ()
API เอกสารสำหรับ jQuery.html ()
ฉันเดาว่ามันสอดคล้องกับNode # textContentและElement # innerHTMLตามลำดับ (การอ้างอิง Gecko DOM)
ในระยะง่าย
html () - เพื่อรับ html ภายใน (แท็ก html และข้อความ)
ข้อความ () - เพื่อรับข้อความเฉพาะถ้ามีอยู่ภายใน (ข้อความเท่านั้น)
ความแตกต่างคือ.html()ประเมินเป็น html .text()ประเมินว่าเป็นข้อความ
พิจารณาบล็อก html
HTML
<div id="mydiv">
<div class="mydiv">
This is a div container
<ul>
<li><a href="#">Link 1</a></li>
<li><a href="#">Link 2</a></li>
</ul>
a text after ul
</div>
</div>
JS
var out1 = $('#mydiv').html();
var out2 = $('#mydiv').text();
console.log(out1) // This output all the html tag
console.log(out2) // This is output just the text 'This is a div container Link 1 Link 2 a text after ul'
ภาพประกอบมาจากลิงค์นี้http://api.jquery.com/text/
.text()จะให้ข้อความจริงระหว่างแท็ก HTML ตัวอย่างเช่นข้อความในย่อหน้าระหว่างpแท็ก สิ่งที่น่าสนใจที่ควรทราบคือมันจะให้ข้อความทั้งหมดในองค์ประกอบที่คุณกำหนดเป้าหมายด้วย$ตัวเลือกของคุณรวมถึงข้อความทั้งหมดในองค์ประกอบลูกขององค์ประกอบที่เลือก ดังนั้นหากคุณมีหลายpแท็กที่มีข้อความภายในองค์ประกอบร่างกายและคุณทำ$(body).text()คุณจะได้รับทุกข้อความจากวรรคทั้งหมด (เฉพาะข้อความไม่ใช่pแท็กเอง)
.html()จะให้ข้อความและแท็กแก่คุณ ดังนั้น$(body).html()โดยทั่วไปจะให้ทั้งหน้า HTML ของคุณหน้า
.val()ทำงานสำหรับองค์ประกอบที่มีแอตทริบิวต์เช่นvalue ไม่ได้มีข้อความหรือ HTML และทำให้และทั้งสองจะสำหรับองค์ประกอบinputinput.text().html()nullinput
ฉันคิดว่าความแตกต่างคือการแทรกแท็ก html ในtext()แท็ก html ของคุณไม่ทำงาน
$('#output').html('You are registered'+'<br>' +' '
+ 'Mister'+' ' + name+' ' + sourname ); }
ผลลัพธ์:
You are registered <br> Mister name sourname
แทนที่text()ด้วยhtml()
เอาท์พุต
You are registered
Mister name sourname
จากนั้นแท็ก<br>ทำงานhtml()
text()โปรดแก้ไขคำตอบของคุณตัวอย่างแรกที่ควรใช้
ฟังก์ชั่นข้อความตั้งค่าหรือดึงค่าเป็นข้อความธรรมดามิฉะนั้นฟังก์ชั่น HTML ตั้งค่าหรือดึงค่าเป็นแท็ก HTML เพื่อเปลี่ยนหรือแก้ไขที่ หากคุณต้องการเปลี่ยนเนื้อหาให้ใช้ข้อความ () แต่ถ้าคุณต้องการเปลี่ยนมาร์กอัปคุณต้องใช้ hmtl ()
มันเป็นคำตอบที่หลอกสำหรับฉันหลังจากหกปีไม่เป็นไร
text()วิธีการนั้นเร็วกว่า เท่าไหร่