เปลี่ยนค่า textNode


93

มีวิธีใดในการเปลี่ยนค่าของ DOM textNode ในเว็บเบราว์เซอร์หรือไม่?

ฉันต้องการทราบเป็นพิเศษว่าฉันสามารถเปลี่ยนโหนดที่มีอยู่ได้หรือไม่แทนที่จะสร้างโหนดใหม่

เพื่อความชัดเจนฉันต้องทำสิ่งนี้ด้วย Javascript ข้อความทั้งหมดในเบราว์เซอร์จะถูกเก็บไว้ใน #textNodes ซึ่งเป็นลูกของโหนด HTML อื่น ๆ แต่ไม่สามารถมีโหนดลูกของตนเองได้

ตามคำตอบด้านล่างเนื้อหาสามารถเปลี่ยนแปลงได้โดยการตั้งค่าคุณสมบัติnodeValueของ Objects เหล่านี้


ตัวอย่าง HTML และสิ่งที่คุณต้องการเปลี่ยนแปลง? คุณต้องการทำโดยใช้จาวาสคริปต์หรือไม่?
shahkalpesh

ในระหว่างการวิจัยของฉันในคำถามเดียวกันผมพบว่าMozilla พัฒนาเครือข่ายยกแจ้งให้ทราบล่วงหน้าการรักษาความปลอดภัยเกี่ยวกับinnerHTMLการใช้งานและโปรดปรานtextContentการใช้งาน ใช้textContentงานได้ดีสำหรับฉัน
Joël

คำตอบ:


133

หากคุณมีโหนดเฉพาะ (ประเภท #text) และต้องการเปลี่ยนค่าคุณสามารถใช้คุณสมบัติnodeValue :

node.nodeValue="new value";

บันทึก:

innerText (และ อาจเป็นไปได้ textContent) จะส่งคืน / ตั้งค่าทั้งโหนดปัจจุบันและข้อความโหนดที่สืบทอดมาทั้งหมดและอาจไม่ใช่พฤติกรรมที่คุณต้องการ / คาดหวัง


1
ใช่ nodeValue เหมาะสำหรับสิ่งนี้ innerText และ textContent แตกต่างกันในเรื่องนี้: IE (ผู้ที่สร้าง innerText) ไม่รองรับบนโหนด #text (เนื่องจากไม่มีโหนดย่อยที่จะ textify) ในขณะที่ textContent ถูกใช้กับโหนด #Element และ #text
Crescent Fresh

4
นอกจากนี้ยังมี 'data' เป็นคำพ้องความหมายสั้น ๆ สำหรับ 'nodeValue' บนข้อความ (เช่นเดียวกับ CDATASection และ Comment)
bobince

nodeValue คือสิ่งที่ฉันต้องการ ด้วยเหตุผลบางอย่างฉันคิดว่ามันเป็นแบบอ่านอย่างเดียว แต่ดูเหมือนว่าจะทำงานบน FF3 และ IE7 ขอบคุณ!
เลวิค

8
@petermeissner: สิ่งนี้ตอบคำถามได้อย่างสมบูรณ์แบบดังนั้นการลงคะแนนของคุณจึงไม่ได้รับการรับรองอย่างสมบูรณ์
Tim Down

1
ไม่ได้ผลเสมอไป .. "เมื่อ nodeValue ถูกกำหนดให้เป็นโมฆะการตั้งค่าจะไม่มีผลใด ๆ " .. ฉันเลือกใช้ "textContent" ในกรณีนั้น ... การตั้งค่าจะอัปเดตค่าสำหรับ "innerText" ด้วย
สำหรับ

-10

ฉันเชื่อว่า innerHTML ใช้สำหรับสิ่งนี้ ... จากนั้นอีกครั้งนั่นไม่ได้รับการอนุมัติ W3C ... แต่ใช้งานได้ ...

node.innerHTML="new value";

1
+1 สำหรับโซลูชันที่ใช้งานได้ nodeValue ไม่ให้ฉันแทนที่เนื้อหาขององค์ประกอบ
petermeissner

3
คุณไม่ควรใช้innerHTMLเนื่องจากถือว่าโค้ดเป็นข้อความทั้งในการอ่านและการเขียน
จอห์น

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