อะไรคือความแตกต่างระหว่าง 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 และทำให้และทั้งสองจะสำหรับองค์ประกอบinput
input
.text()
.html()
null
input
ฉันคิดว่าความแตกต่างคือการแทรกแท็ก 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()
วิธีการนั้นเร็วกว่า เท่าไหร่