การเปลี่ยนแปลงเนื้อหา ใน Html Dom

#พื้นฐานการเขียนเว็ปไซต์

#javascript

#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() เพื่อแก้ไขเนื้อหาหรือคุณสมบัติขององค์ประกอบที่เลือก

2025/10/28 แก้ไขเป็น

... อ่านเพิ่มเติม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 เมื่อจำเป็นจริง ๆ