การเปลี่ยนแปลงเนื้อหา ใน Html Dom
#Dom_javascript
การเปลี่ยนแปลงเนื้อหา HTML โดยใช้ HTML DOM
การเปลี่ยนแปลงเนื้อหาใน HTML โดยใช้ HTML DOM (Document Object Model) โดยหลัก ๆ แล้วจะทำผ่าน JavaScript โดยการเข้าถึงองค์ประกอบ (element) ที่ต้องการและแก้ไขคุณสมบัติ (properties) ของมัน นี่คือวิธีที่ใช้บ่อยที่สุด:
1. การ เปลี่ยนเนื้อหาข้อความ (Text Content)
ใช้คุณสมบัติ .textContent หรือ .innerText เพื่อเปลี่ยนข้อความภายในองค์ประกอบ HTML:
.textContent: ตั้งค่าหรือส่งคืนเนื้อหาข้อความขององค์ประกอบและผู้สืบทอด (descendants) ทั้งหมด โดยไม่สนใจการจัดรูปแบบ HTML (เช่น แท็ก <br>)
.innerText: ตั้งค่าหรือส่งคืนเนื้อหาข้อความที่ "มองเห็นได้" ขององค์ประกอบ โดยจะคำนึงถึงการจัดรูปแบบ CSS (เช่น จะไม่รวมข้อความที่ถูกซ่อนโดย display: none;)
ตัวอย่าง:
HTML
<p id="myParagraph">ข้อความเดิม</p>
<script>
// เลือกองค์ประกอบ <p> ด้วย id
const pElement = document.getElementById("myParagraph");
// เปลี่ยนเนื้อหาข้อความ
pElement.textContent = "ข้อความใหม่ที่ถูกเปลี่ยนโดย DOM";
// หรือ pElement.innerText = "ข้อค วามใหม่ที่ถูกเปลี่ยนโดย DOM";
</script>
2. การเปลี่ยนเนื้อหา HTML (HTML Content)
ใช้คุณสมบัติ .innerHTML เพื่อเปลี่ยนเนื้อหา HTML ทั้งหมดภายในองค์ประกอบ ซึ่งสามารถรวมถึงแท็ก HTML อื่นๆ ได้:
ตัวอย่าง:
HTML
<div id="myDiv">
<p>เนื้อหาเดิม</p>
</div>
<script>
// เลือกองค์ประกอบ <div> ด้วย id
const divElement = document.getElementById("myDiv");
// เปลี่ยนเนื้อหาเป็น HTML ใหม่ (รวมแท็ก <strong> และ <em>)
divElement.innerHTML = "<h2>หัวข้อใหม่</h2><p><strong>ข้อความที่ถูก <em>เน้น</em></strong></p>";
</script>
ข้อควรระวัง: การใช้ .innerHTML กับข้อมูลที่มาจากผู้ใช้ที่ไม่น่าเชื่อถืออาจทำให้เกิดช่องโหว่ XSS (Cross-Site Scripting) ได้ ควรใช้ .textContent เมื่อต้องการเปลี่ยนเพียงแค่ข้อความเท่านั้น เพื่อความปลอดภัย
3. การเปลี่ยนคุณสมบัติ (Attributes) ขององค์ประกอบ
ใช้เมธอด .setAttribute() หรือการเข้าถึงคุณสมบัติโดยตรงเพื่อเปลี่ยนค่าของแอตทริบิวต์:
ตัวอย่าง:
HTML
<img id="myImage" src="old_image.jpg" alt="ภาพเดิม">
<script>
const imgElement = document.getElementById("myImage");
// 1. เปลี่ยนแอตทริบิวต์ 'src' โดยตรง
imgElement.src = "new_image.png";
// 2. เปลี่ยนแอตทริบิวต์ 'alt' โดยใช้ setAttribute
imgElement.setAttribute("alt", "ภาพใหม่");
// 3. เปลี่ยนแอตทริบิวต์ 'class'
imgElement.className = "active-state";
</script>
สรุปขั้นตอนการเปลี่ยนแปลงเนื้อหา:
ค้นหา (Find): ใช้เมธอด DOM เช่น document.getElementById(), document.querySelector(), document.getElementsByClassName() เพื่อเลือกองค์ประกอบเป้าหมาย
เปลี่ยนแปลง (Change): ใช้คุณสมบัติต่าง ๆ เช่น .textContent, .innerHTML, .src, .setAttribute() เพื่อแก้ไขเนื้อหาหรือคุณสมบัติขององค์ประกอบที่เลือก
DOM คืออะไร (อธิบายแบบคนเริ่มทำเว็บ) ตอนเราเริ่มเขียนเว็บใหม่ ๆ คำว่า “DOM” โผล่มาบ่อยมาก โดยเฉพาะเวลาอยากทำให้หน้าเว็บเปลี่ยนข้อความ เปลี่ยนรูป หรือกดปุ่มแล้วมีอะไรเกิดขึ้น สรุปสั้น ๆ DOM (Document Object Model) คือ “โครงสร้างของหน้าเว็บ” ที่เบราว์เซอร์สร้างขึ้นมาจาก HTML ของเรา แล้วเปิดให้ JavaScript เข้ามาอ่าน/แก้ไขได้เหมือนเป็นต้นไม้ (tree) ของ node และ element ทำไมต้องเข้าใจ DOM? เพราะเวลาพูดว่า “เปลี่ยนหน้าเว็บด้วย JavaScript” จริง ๆ คือเราไม่ได้ไปแก้ไฟล์ HTML โดยตรง แต่เราไปแก้ DOM ที่กำลังแสดงอยู่ในเบราว์เซอร์ เช่น เปลี่ยนข้อความใน <p>, ใส่ HTML ใหม่ใน <div>, หรือเปลี่ยน attribute ของ <img> ภาพรวมขั้นตอนที่ใช้บ่อย (จำง่าย ๆ) 1) Find: หา element ที่ต้องการ - document.getElementById("...") - document.querySelector("...") (แนะนำเพราะใช้ selector แบบ CSS) 2) Change: เปลี่ยนสิ่งที่ต้องการ - เปลี่ยนข้อความ: .textContent หรือ .innerText - เปลี่ยนโค้ด HTML ข้างใน: .innerHTML - เปลี่ยน attribute: .setAttribute() หรือเปลี่ยน property ตรง ๆ เช่น img.src ตัวอย่างที่เจอบ่อยในงานจริง - อยากอัปเดตข้อความสถานะ เช่น “กำลังโหลด...” -> “เสร็จแล้ว” ผมจะใช้ textContent เป็นหลัก เพราะปลอดภัยและไม่ต้องสนใจแท็ก HTML: const status = document.querySelector('#status'); status.textContent = 'เสร็จแล้ว'; - อยากใส่โครงสร้าง HTML เพิ่ม เช่น สร้างรายการหรือหัวข้อย่อย อันนี้ค่อยใช้ innerHTML แต่ต้องมั่นใจว่า string ไม่ได้มาจากผู้ใช้แบบสุ่ม ๆ: const box = document.querySelector('.result'); box.innerHTML = '<h2>ผลลัพธ์</h2><p>อัปเดตแล้ว</p>'; ข้อควรระวังที่หลายคนพลาด: innerHTML และ XSS ถ้าคุณเอาข้อความจากช่อง input หรือข้อมูลที่ผู้ใช้ส่งมา แล้วยัดเข้า innerHTML ตรง ๆ อาจโดนฝังสคริปต์ (XSS) ได้ ทางที่ปลอดภัยคือ: - ถ้าเป็น “ข้อความล้วน” ใช้ textContent - ถ้าจำเป็นต้องสร้าง element ให้ใช้ document.createElement() + appendChild() (ปลอดภัยกว่า innerHTML) สรุปสั้น ๆ ให้จำ DOM คือสะพานระหว่าง HTML กับ JavaScript: เรา “หา element” ใน DOM แล้ว “แก้เนื้อหา/คุณสมบัติ” ด้วย textContent, innerText, innerHTML, และ setAttribute() ถ้าเน้นปลอดภัยให้เริ่มจาก textContent ก่อน แล้วค่อยขยับไปใช้ innerHTML เมื่อจำเป็นจริง ๆ