ตอนนี้ค่าแอตทริบิวต์ contenteditable "plaintext-only" เป็นแบบใหม่ที่ใช้เป็นฐานได้แล้ว

เผยแพร่: 20 มี.ค. 2025

เมื่อต้องการอนุญาตให้ผู้ใช้ป้อนข้อมูลแบบข้อความธรรมดา สิ่งแรกที่คุณอาจนึกถึงคือ <textarea> วิธีการนี้ใช้ได้กับหลายกรณีและไม่ต้องพยายามเป็นพิเศษเพื่อให้ทำงานร่วมกับแบบฟอร์มได้ แต่ก็มีข้อจำกัดเช่นกัน

ตัวอย่างหนึ่งคือการเพิ่ม <textarea> แบบไดนามิกตามเนื้อหาโดยไม่ต้องใช้แฮ็ก มี field-sizing: content แต่รองรับเบราว์เซอร์อย่างจำกัด ด้วยเหตุนี้ ชุดค่าผสมค่าแอตทริบิวต์ contenteditable="plaintext-only" จึงเข้ามามีบทบาท คุณสามารถเพิ่มลงในองค์ประกอบทั่วไป เช่น <div> และปล่อยให้องค์ประกอบดังกล่าวจัดการการปรับขนาดโดยอัตโนมัติ

ข้อจํากัดอีกประการหนึ่งคือการจัดสไตล์ CSS Custom Highlight API มีกลไกการจัดรูปแบบช่วงข้อความที่กำหนดเองในเอกสารโดยใช้ JavaScript เพื่อสร้างช่วงและ CSS เพื่อจัดรูปแบบ <textarea> ใช้ <div> ในรูทเงาของ User Agent ภายใน ซึ่งทําให้การจัดรูปแบบข้อความด้วย CSS Custom Highlight API ไม่ทํางาน หากใช้กับองค์ประกอบ เช่น <div> โดยตรงที่คุณสร้างขึ้น contenteditable CSS Custom Highlight API จะทำงานได้อย่างถูกต้อง

<style>
  ::highlight(highlight) {
    background-color: yellow;
    color: black;
  }
</style>

<div contenteditable="plaintext-only">Edit me</div>

<script>
  const parentNode = document.querySelector('div').firstChild;
  const range = new Range();
  range.setStart(parentNode, 0);
  range.setEnd(parentNode, 3);
  const highlight = new Highlight(range);
  CSS.highlights.set('highlight', highlight);
</script>

แผงองค์ประกอบของเครื่องมือสำหรับนักพัฒนาเว็บใน Chrome ที่ตรวจสอบ textarea ซึ่งแสดงว่าใช้ div ในรูทเงาของ User Agent

ภาพหน้าจอของเดโมที่แสดงข้อจํากัดนี้ โปรดสังเกตว่าข้อความใน <textarea> ไม่มีการจัดรูปแบบ แต่ข้อความในองค์ประกอบ <div> ทั่วไป 2 รายการของ contenteditable มีการจัดรูปแบบ

การสาธิตที่แสดงวิธีที่ CSS Custom Highlight API ทำงานร่วมกับองค์ประกอบ div ที่มีแอตทริบิวต์ contenteditable เท่านั้น แต่ใช้กับ textarea ไม่ได้