JavaScript และ HTML
บทความนี้อธิบายเกี่ยวกับ JavaScript และ HTML
YouTube Video
javascript-html-dom.html
1<!DOCTYPE html>
2<html lang="en">
3<head>
4 <meta charset="UTF-8">
5 <title>JavaScript & HTML</title>
6 <style>
7 * {
8 box-sizing: border-box;
9 }
10
11 body {
12 margin: 0;
13 padding: 2em;
14 font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
15 background-color: #f7f9fc;
16 color: #333;
17 line-height: 1.6;
18 }
19
20 .container {
21 max-width: 800px;
22 margin: 0 auto;
23 padding: 1em;
24 background-color: #ffffff;
25 border: 1px solid #ccc;
26 border-radius: 10px;
27 box-shadow: 0 4px 12px rgba(0, 0, 0, 0.05);
28 }
29
30 h1, h2 {
31 font-size: 1.5rem;
32 color: #007bff;
33 margin-top: 0.5em;
34 margin-bottom: 0.5em;
35 border-left: 5px solid #007bff;
36 padding-left: 0.6em;
37 background-color: #e9f2ff;
38 }
39
40 button {
41 display: block;
42 margin: 1em auto;
43 padding: 0.75em 1.5em;
44 font-size: 1rem;
45 background-color: #007bff;
46 color: white;
47 border: none;
48 border-radius: 6px;
49 cursor: pointer;
50 transition: background-color 0.3s ease;
51 }
52
53 button:hover {
54 background-color: #0056b3;
55 }
56
57 #output {
58 margin-top: 1em;
59 background-color: #1e1e1e;
60 color: #0f0;
61 padding: 1em;
62 border-radius: 8px;
63 min-height: 200px;
64 font-family: Consolas, monospace;
65 font-size: 0.95rem;
66 overflow-y: auto;
67 white-space: pre-wrap;
68 }
69
70 .highlight {
71 outline: 3px solid #ffc107; /* yellow border */
72 background-color: #fff8e1; /* soft yellow background */
73 transition: background-color 0.3s ease, outline 0.3s ease;
74 }
75
76 .active {
77 background-color: #28a745; /* green background */
78 color: #fff;
79 box-shadow: 0 0 10px rgba(40, 167, 69, 0.5);
80 transition: background-color 0.3s ease, box-shadow 0.3s ease;
81 }
82 </style>
83</head>
84<body>
85 <div class="container">
86 <h1>JavaScript Console</h1>
87 <button id="executeBtn">Execute</button>
88 <div id="output"></div>
89 </div>
90
91 <div class="container">
92 <h2>HTML Sample</h2>
93 <div id="content">Hello, World!</div>
94 <button id="changeText">Change Text</button>
95 </div>
96
97 <script>
98 // Override console.log to display messages in the #output element
99 (function () {
100 const originalLog = console.log;
101 console.log = function (...args) {
102 originalLog.apply(console, args);
103 const output = document.getElementById('output');
104 output.textContent += args.map(String).join(' ') + '\n';
105 };
106 })();
107
108 document.getElementById('executeBtn').addEventListener('click', () => {
109 // Prevent multiple loads
110 if (document.getElementById('externalScript')) return;
111
112 const script = document.createElement('script');
113 script.src = 'javascript-html-dom.js';
114 script.id = 'externalScript';
115 //script.onload = () => console.log('javascript-html-dom.js loaded and executed.');
116 //script.onerror = () => console.log('Failed to load javascript-html-dom.js.');
117 document.body.appendChild(script);
118 });
119 </script>
120</body>
121</html>
ออบเจ็กต์ window
ใน JavaScript
ออบเจ็กต์ window
ใน JavaScript เป็นออบเจ็กต์ระดับโกลบอลในสภาพแวดล้อมของเบราว์เซอร์ โดยมีฟังก์ชันและข้อมูลที่เกี่ยวข้องกับหน้าเว็บและหน้าต่างเบราว์เซอร์ เนื่องจาก window
เป็นขอบเขตระดับโกลบอลของเบราว์เซอร์ โค้ด JavaScript ทั้งหมดที่ทำงานในเบราว์เซอร์จะกลายเป็นส่วนหนึ่งของออบเจ็กต์ window
ออบเจ็กต์ window
มีบทบาทสำคัญในการทำงานของ JavaScript ในสภาพแวดล้อมเบราว์เซอร์ โดยมี API และคุณสมบัติมากมาย
คุณสมบัติสำคัญของออบเจ็กต์ window
คุณสมบัติ
1// Get and display the document's title
2console.log(`Title: ${window.document.title}`);
3
4// Get and display the current URL
5console.log(`URL: ${window.location.href}`);
6
7// Go back to the previous page
8// Note: this will navigate back in history, so be careful when running it
9console.log("Navigating back to the previous page...");
10window.history.back();
11
12// Display the browser's user agent
13console.log(`User Agent: ${window.navigator.userAgent}`);
14
15// Display the width and height of the viewport
16console.log(`Viewport Width: ${window.innerWidth}`);
17console.log(`Viewport Height: ${window.innerHeight}`);
window.document
: เข้าถึงเอกสาร HTML ปัจจุบันwindow.location
: จัดการ URL ปัจจุบันและการนำทางในเบราว์เซอร์window.history
: เข้าถึงข้อมูลประวัติการใช้งานของเบราว์เซอร์และอนุญาตการนำทางไปข้างหน้าหรือถอยหลังwindow.navigator
: ให้ข้อมูลเกี่ยวกับเบราว์เซอร์และอุปกรณ์window.innerWidth
/window.innerHeight
: ดึงค่าความกว้างและความสูงของพื้นที่มุมมอง
เมธอด
1// Show an alert
2window.alert('Hello, this is an alert!');
3
4// Show a confirmation dialog
5if (window.confirm('Are you sure you want to proceed?')) {
6 console.log('User clicked OK');
7} else {
8 console.log('User clicked Cancel');
9}
10
11// Show a prompt dialog
12const userInput = window.prompt('Please enter your name:');
13console.log(`Hello, ${userInput}!`);
14
15// Open a new tab
16window.open('https://www.example.com', '_blank');
17
18// Display a message after 3 seconds
19window.setTimeout(() => {
20 console.log('This message appears after 3 seconds!');
21}, 3000);
22
23// Display a message every second
24const intervalId = window.setInterval(() => {
25 console.log('This message appears every second!');
26}, 1000);
27
28// Clear the interval after 5 seconds
29setTimeout(() => {
30 clearInterval(intervalId);
31 console.log('Interval cleared.');
32}, 5000);
window.alert()
: แสดงกล่องข้อความเตือนwindow.confirm()
: แสดงกล่องข้อความเพื่อขอการยืนยันจากผู้ใช้และคืนค่าผลลัพธ์เป็น OK หรือ Cancelwindow.prompt()
: แสดงกล่องข้อความเพื่อขอข้อมูลจากผู้ใช้และดึงค่าที่ป้อนwindow.open()
: เปิดหน้าต่างใหม่หรือแท็บใหม่window.setTimeout()
/window.setInterval()
: ตั้งเวลาเพื่อเรียกใช้ฟังก์ชันหลังจากเวลาที่กำหนดหรือเป็นช่วงเวลาที่กำหนด
การจัดการเหตุการณ์
1// Display a message when the page is fully loaded
2window.onload = () => {
3 console.log('Page is fully loaded!');
4};
5
6// Display a message when the window is resized
7window.onresize = () => {
8 console.log('Window resized! New size:', window.innerWidth, 'x', window.innerHeight);
9};
10
11// Display a message when the page is being scrolled
12window.onscroll = () => {
13 console.log('Page is being scrolled!');
14};
window.onload
: เหตุการณ์นี้จะเกิดขึ้นเมื่อหน้าเพจโหลดเสร็จสมบูรณ์window.onresize
: เหตุการณ์นี้จะเกิดขึ้นเมื่อมีการปรับขนาดหน้าต่างwindow.onscroll
: เหตุการณ์นี้จะเกิดขึ้นเมื่อผู้ใช้เลื่อนหน้าเพจ
บทบาทในฐานะตัวแปรระดับโลก
1var myVar = 10;
2console.log(window.myVar); // 10
- ออบเจ็กต์
window
เก็บตัวแปรและฟังก์ชันระดับโลก กล่าวอีกนัยหนึ่ง ตัวแปรและฟังก์ชันที่ประกาศไว้จะกลายเป็นพร็อพเพอร์ตี้ของwindow
โดยอัตโนมัติ
การจัดการ DOM ใน JavaScript
การจัดการ DOM (Document Object Model) ใน JavaScript ถูกใช้เพื่อโต้ตอบกับองค์ประกอบในหน้าเว็บในลักษณะแบบไดนามิก DOM แสดงโครงสร้างของเอกสาร HTML ในรูปแบบต้นไม้ ซึ่งสามารถปรับเปลี่ยนได้โดยใช้ JavaScript เพื่อแก้ไขโครงสร้างและควบคุมการแสดงผลของหน้า
พื้นฐานของ DOM
DOM มอง HTML ของหน้าเว็บเป็นออบเจ็กต์ ทำให้สามารถเข้าถึงและแก้ไของค์ประกอบและแอตทริบิวต์ได้ ใช้ออบเจ็กต์ document
เพื่อเข้าถึงเอกสาร HTML
การดึงองค์ประกอบ DOM
JavaScript มีหลายเมธอดในการเข้าถึงองค์ประกอบใน DOM
document.getElementById()
: ดึงองค์ประกอบตามแอตทริบิวต์id
document.getElementsByClassName()
: ดึงองค์ประกอบด้วยชื่อคลาส ส่งกลับค่าเป็นHTMLCollection
HTMLCollection
เป็นคอลเลกชันแบบไดนามิกที่แสดงการเปลี่ยนแปลงของ DOM แบบเรียลไทม์document.getElementsByTagName()
: ดึงองค์ประกอบโดยใช้ชื่อแท็ก ส่งกลับค่าเป็นHTMLCollection
document.querySelector()
: ใช้ CSS selector เพื่อดึงองค์ประกอบแรกที่ตรงกันdocument.querySelectorAll()
: ใช้ CSS selector เพื่อดึงองค์ประกอบทั้งหมดที่ตรงกัน ส่งกลับค่าเป็นNodeList
NodeList
เป็นคอลเลกชันแบบคงที่ที่เก็บสถานะเมื่อถูกดึงข้อมูลและจะไม่แสดงการเปลี่ยนแปลงของ DOM หลังจากนั้น
ตัวอย่าง: getElementById
และ querySelector
1<div id="content">Hello, World!</div>
2<button id="changeText">Change Text</button>
1const content = document.getElementById('content');
2console.log(content.textContent); // "Hello, World!"
3
4const button = document.querySelector('#changeText');
การจัดการ DOM
สามารถดำเนินการหลากหลายบนองค์ประกอบที่ดึงมาได้
การเปลี่ยนข้อความ
เพื่อเปลี่ยนข้อความขององค์ประกอบ ให้ใช้ textContent
หรือ innerHTML
textContent
: ดึงหรือเปลี่ยนเนื้อหาข้อความขององค์ประกอบ แท็ก HTML จะไม่ถูกตีความinnerHTML
: ดึงหรือเปลี่ยนเนื้อหา HTML ขององค์ประกอบ สตริงที่มีแท็ก HTML จะถูกประมวลผลด้วย
1content.textContent = 'Hello, world!'; // Change the text
2button.innerHTML = '<strong>Click to change</strong>'; // Change including HTML
เปลี่ยนแปลงคุณสมบัติ
ใช้ setAttribute()
และ getAttribute()
เพื่อเปลี่ยนแปลงคุณสมบัติขององค์ประกอบ
1button.setAttribute('disabled', 'true'); // Disable the button
2const id = content.getAttribute('id'); // Get the "content"
3console.log(id);
เปลี่ยนแปลง CSS
ใช้คุณสมบัติ style
เพื่อเปลี่ยนรูปแบบ CSS
1content.style.color = 'red'; // Change the text color to red
2content.style.fontSize = '20px'; // Change the font size
การจัดการคลาส
ใช้ classList
เพื่อเพิ่มหรือลบคลาสออกจากองค์ประกอบ
add()
: เพิ่มคลาสremove()
: ลบคลาสtoggle()
: เพิ่มหรือลบคลาสขึ้นอยู่กับว่ามีอยู่หรือไม่contains()
: ตรวจสอบว่ามีคลาสนั้นอยู่หรือไม่
1content.classList.add('highlight'); // Add a class
2button.classList.toggle('active'); // Toggle a class
การสร้างและลบองค์ประกอบ DOM
การสร้างองค์ประกอบใหม่
ใช้ document.createElement()
เพื่อสร้างองค์ประกอบใหม่และเพิ่มเข้าใน DOM
1const newDiv = document.createElement('div'); // Create a new div element
2newDiv.textContent = 'This is a new element';
3document.body.appendChild(newDiv); // Append to the body element
การลบองค์ประกอบ
ใช้วิธี remove()
เพื่อลบองค์ประกอบ
1newDiv.remove(); // Remove the created element
การเพิ่มอีเวนต์
ในส่วนหนึ่งของการจัดการ DOM คุณสามารถเพิ่มตัวจัดการอีเวนต์เพื่อตอบสนองต่อการโต้ตอบของผู้ใช้ ใช้ addEventListener()
เพื่อจัดการอีเวนต์ เช่น การคลิกและการโต้ตอบผ่านคีย์บอร์ด
1button.addEventListener('click', () => {
2 content.textContent = 'The text has been changed';
3});
ในตัวอย่างนี้ การคลิกปุ่มจะเปลี่ยนข้อความขององค์ประกอบ #content
การนำทางผ่านต้นไม้ DOM
คุณสามารถนำทางผ่าน DOM เพื่อเข้าถึงองค์ประกอบพาเรนต์และพี่น้อง
parentNode
: เข้าถึงโหนดแม่childNodes
: เข้าถึงโหนดลูก คุณสามารถเข้าถึงโหนด ทุกประเภท ไม่ใช่แค่โหนดองค์ประกอบอย่างแท็ก HTML แต่ยังรวมถึงโหนดข้อความและโหนดคอมเมนต์ด้วยfirstChild
/lastChild
: เข้าถึงลูกโหนดตัวแรกและตัวสุดท้ายnextSibling
/previousSibling
: เข้าถึงโหนดพี่น้องถัดไปและก่อนหน้า
1const parent = content.parentNode; // Get the parent element
2const firstChild = parent.firstChild; // Get the first child element
3console.log(firstChild);
ตัวอย่าง: การเพิ่มรายการใหม่ในรายการ
นี่คือตัวอย่างของการเพิ่มรายการใหม่ในรายการ
1// Get the container element where the HTML will be inserted
2const content = document.getElementById('content');
3
4// Create the <ul> element with id="list"
5const list = document.createElement('ul');
6list.id = 'list';
7
8// Add initial list items
9const item1 = document.createElement('li');
10item1.textContent = 'Item 1';
11list.appendChild(item1);
12
13const item2 = document.createElement('li');
14item2.textContent = 'Item 2';
15list.appendChild(item2);
16
17// Create the <button> element with id="addItem"
18const addItemButton = document.createElement('button');
19addItemButton.id = 'addItem';
20addItemButton.textContent = 'Add Item';
21
22// Append the list and button to the content container
23content.appendChild(list);
24content.appendChild(addItemButton);
25
26// Add event listener to the button
27addItemButton.addEventListener('click', () => {
28 const newItem = document.createElement('li');
29 newItem.textContent = 'New Item';
30 list.appendChild(newItem);
31});
ในโค้ดนี้ เมื่อคลิกปุ่ม "Add Item" จะเพิ่มองค์ประกอบ <li>
ใหม่ลงในรายการ
สรุป
- การจัดการ DOM ด้วย JavaScript ช่วยให้คุณสามารถดึง แก้ไข สร้าง และลบองค์ประกอบในเอกสาร HTML ได้
- คุณสามารถดึงองค์ประกอบได้โดยใช้เมธอด เช่น
getElementById()
และquerySelector()
- ใช้
textContent
หรือinnerHTML
เพื่อเปลี่ยนข้อความและ HTML และใช้setAttribute()
เพื่อจัดการแอตทริบิวต์ - ใช้
createElement()
เพื่อสร้างองค์ประกอบใหม่ และใช้remove()
เพื่อลบองค์ประกอบ - คุณสามารถสร้างเว็บเพจที่ตอบสนองต่อการกระทำของผู้ใช้ได้ผ่านการจัดการอีเวนต์
คุณสามารถติดตามบทความข้างต้นโดยใช้ Visual Studio Code บนช่อง YouTube ของเรา กรุณาตรวจสอบช่อง YouTube ด้วย