โปรดทราบว่าElement::innerText
คุณสมบัตินี้จะไม่มีข้อความที่ถูกซ่อนโดยสไตล์ CSS "display:none
" ใน Google Chrome (รวมถึงจะวางเนื้อหาที่ถูกหลอกลวงโดยเทคนิค CSS อื่น ๆ (รวมถึงขนาดตัวอักษร: 0, สี: โปร่งใสและ เอฟเฟกต์อื่น ๆ ที่คล้ายกันซึ่งทำให้ข้อความไม่สามารถแสดงผลในลักษณะที่มองเห็นได้)
คุณสมบัติ CSS อื่น ๆ ยังได้รับการพิจารณา:
- ก่อนอื่นสไตล์ "display:" ขององค์ประกอบภายในจะถูกวิเคราะห์เพื่อกำหนดว่าจะแบ่งเนื้อหาบล็อก (เช่น "display: block" ซึ่งเป็นค่าเริ่มต้นขององค์ประกอบบล็อก HTML ในสไตล์ชีต builtin ของเบราว์เซอร์และพฤติกรรมที่ไม่ถูกแทนที่ด้วย สไตล์ CSS ของคุณเอง); ถ้าเป็นเช่นนั้นจะมีการแทรกบรรทัดใหม่ในค่าของคุณสมบัติ innerText สิ่งนี้จะไม่เกิดขึ้นกับคุณสมบัติ textContent
- คุณสมบัติ CSS ที่สร้างเนื้อหาอินไลน์จะได้รับการพิจารณาด้วยเช่นองค์ประกอบอินไลน์
<br \>
ที่สร้างขึ้นบรรทัดใหม่จะสร้างบรรทัดใหม่ในค่า innerText
- ลักษณะ "display: inline" ทำให้ไม่มีการขึ้นบรรทัดใหม่ใน textContent หรือ innerText
- สไตล์ "display: table" จะสร้างบรรทัดใหม่รอบ ๆ ตารางและระหว่างแถวของตาราง แต่ "display: table-cell" จะสร้างอักขระแบบตาราง
- คุณสมบัติ "ตำแหน่ง: สัมบูรณ์" (ใช้กับจอแสดงผล: บล็อกหรือจอแสดงผล: อินไลน์ไม่สำคัญ) จะทำให้แทรกตัวแบ่งบรรทัด
- เบราว์เซอร์บางตัวจะมีการแยกช่องว่างระหว่าง Spans ด้วย
แต่Element::textContent
จะยังคงมีเนื้อหาทั้งหมดขององค์ประกอบข้อความด้านในอย่างอิสระของ CSS ที่ใช้แม้ว่าจะมองไม่เห็นก็ตาม และจะไม่มีการสร้างบรรทัดใหม่หรือช่องว่างพิเศษใน textContent ซึ่งเพียงละเว้นสไตล์ทั้งหมดและโครงสร้างและอินไลน์ / บล็อกหรือประเภทตำแหน่งขององค์ประกอบภายใน
สำเนา / วางการดำเนินงานโดยใช้ตัวเลือกเมาส์จะทิ้งข้อความที่ซ่อนอยู่ในรูปแบบข้อความธรรมดาที่จะใส่ในคลิปบอร์ดดังนั้นมันจะไม่ได้มีทุกอย่างในtextContent
แต่เพียงสิ่งที่อยู่ภายในinnerText
(หลังจากช่องว่าง / รุ่นขึ้นบรรทัดใหม่ข้างต้น) .
คุณสมบัติทั้งสองนี้ได้รับการสนับสนุนใน Google Chrome แต่เนื้อหาอาจมีความแตกต่างกัน เบราว์เซอร์รุ่นเก่ายังคงรวมอยู่ใน innetText ทุกอย่างเหมือนกับ textContent ในขณะนี้ (แต่พฤติกรรมของพวกเขาสัมพันธ์กับการสร้างช่องว่าง / การขึ้นบรรทัดใหม่ในตอนนั้นไม่สอดคล้องกัน)
jQuery จะแก้ปัญหาความไม่สอดคล้องกันเหล่านี้ระหว่างเบราว์เซอร์โดยใช้วิธี ".text ()" ที่เพิ่มเข้าไปในองค์ประกอบที่แยกวิเคราะห์ซึ่งจะส่งคืนผ่านการสืบค้น $ () ภายในจะแก้ปัญหาโดยการดูใน DOM HTML ทำงานเฉพาะกับระดับ "โหนด" ดังนั้นมันจะส่งคืนบางสิ่งที่ดูเหมือนข้อความมาตรฐานมากกว่า
ข้อแม้คือว่าวิธีการ jQuery นี้จะไม่แทรกช่องว่างเพิ่มเติมหรือตัวแบ่งบรรทัดที่อาจปรากฏบนหน้าจอที่เกิดจากองค์ประกอบย่อย (เช่น<br />
) ของเนื้อหา
หากคุณออกแบบสคริปต์สำหรับการช่วยสำหรับการเข้าถึงและสไตล์ชีทของคุณได้รับการวิเคราะห์สำหรับการเรนเดอร์แบบไม่เกี่ยวกับหูเช่นปลั๊กอินที่ใช้ในการสื่อสารกับเครื่องอ่านอักษรเบรลล์เครื่องมือนี้ควรใช้ textContent หากต้องมีเครื่องหมายวรรคตอนเฉพาะ "display: none" และโดยทั่วไปจะรวมอยู่ในหน้าเว็บ (ตัวอย่างเช่นตัวยก / ตัวห้อย) มิฉะนั้น innerText จะสับสนมากในเครื่องอ่านอักษรเบรลล์
โดยทั่วไปแล้วข้อความที่ถูกซ่อนโดย CSS จะถูกละเว้นโดยเสิร์ชเอนจิ้นหลัก (ซึ่งจะแยก CSS ของหน้า HTML ของคุณและจะไม่สนใจข้อความที่ไม่ตัดกันสีบนพื้นหลัง) โดยใช้ตัวแยกวิเคราะห์ HTML / CSS และคุณสมบัติ DOM "innerText" เหมือนกับในเบราว์เซอร์ภาพที่ทันสมัย (อย่างน้อยเนื้อหาที่มองไม่เห็นนี้จะไม่ถูกจัดทำดัชนีดังนั้นข้อความที่ซ่อนไม่สามารถใช้เป็นเคล็ดลับในการบังคับให้รวมคำหลักบางคำในหน้าเพื่อตรวจสอบเนื้อหา); แต่ข้อความที่ซ่อนอยู่นี้จะปรากฏในหน้าผลลัพธ์ (หากหน้านั้นยังคงมีคุณสมบัติจากดัชนีที่จะรวมอยู่ในผลลัพธ์) โดยใช้คุณสมบัติ "textContent" แทน HTML เต็มเพื่อตัดสไตล์และสคริปต์เพิ่มเติม
หากคุณกำหนดข้อความธรรมดาบางอย่างในหนึ่งในสองคุณสมบัตินี้จะเขียนทับมาร์กอัปภายในและสไตล์ที่ใช้กับมัน (เฉพาะองค์ประกอบที่กำหนดจะเก็บประเภทคุณลักษณะและสไตล์) ดังนั้นคุณสมบัติทั้งสองจะมีเนื้อหาเดียวกัน . อย่างไรก็ตามตอนนี้เบราว์เซอร์บางตัวจะไม่เคารพการเขียนไปยัง innerText อีกต่อไปและจะให้คุณเขียนทับคุณสมบัติ textContent (คุณไม่สามารถแทรกมาร์กอัพ HTML เมื่อเขียนไปยังคุณสมบัติเหล่านี้เนื่องจากอักขระพิเศษ HTML จะถูกเข้ารหัสอย่างเหมาะสมโดยใช้การอ้างอิงอักขระตัวเลข ถ้าคุณแล้วอ่านinnerHTML
คุณสมบัติหลังจากที่ได้รับมอบหมายของหรือinnerText
textContent