ด้วย HTML DOM คุณสามารถนำทางแผนผังโหนดโดยใช้โหนด ความสัมพันธ์
ตามมาตรฐาน W3C HTML DOM ทุกอย่างในเอกสาร HTML จะเป็นโหนด:
เอกสารทั้งหมดเป็นโหนดเอกสาร
องค์ประกอบ HTML ทุกรายการเป็นโหนดองค์ประกอบ
ข้อความภายในองค์ประกอบ HTML คือโหนดข้อความ
ทุกแอตทริบิวต์ HTML เป็นโหนดแอตทริบิวต์ (เลิกใช้แล้ว)
ความคิดเห็นทั้งหมดเป็นโหนดความคิดเห็น
ด้วย HTML DOM โหนดทั้งหมดในแผนผังโหนดสามารถเข้าถึงได้โดย JavaScript
สามารถสร้างโหนดใหม่ได้ทั้งหมด โหนดสามารถแก้ไขหรือลบได้
โหนดในแผนผังโหนดมีความสัมพันธ์แบบลำดับชั้นซึ่งกันและกัน
คำว่าพ่อแม่ ลูก และพี่น้องใช้เพื่ออธิบายความสัมพันธ์
ในแผนผังโหนด โหนดบนสุดเรียกว่ารูท (หรือโหนดรูท)
ทุกโหนดมีพาเรนต์เดียวเท่านั้น ยกเว้นรูท (ซึ่งไม่มีพาเรนต์)
โหนดสามารถมีลูกได้จำนวนหนึ่ง
พี่น้อง (พี่น้อง) เป็นโหนดที่มีผู้ปกครองคนเดียวกัน
<html>
<head>
<title>DOM Tutorial</title>
</head>
<body>
<h1>DOM Lesson one</h1>
<p>Hello world!</p>
</body>
</html>
จาก HTML ด้านบนคุณสามารถอ่านได้:
<html>
เป็นโหนดรูท
<html>
ไม่มีพาเรนต์
<html>
เป็นพาเรนต์ของ <head>
และ < ร่างกาย>
<head>
เป็นลูกแรกของ <html>
<body>
เป็นลูกสุดท้ายของ <html>
และ :
<head>
มีลูกหนึ่งคน: <title>
<title>
มีหนึ่งลูก (โหนดข้อความ): "DOM Tutorial"
<body>
มีสองลูก: <h1>
และ <
<h1>
มีลูกหนึ่งคน: "DOM บทเรียนที่หนึ่ง"
<p>
มีลูกหนึ่งคน: "Hello world!"
<h1>
และ <p>
เป็นพี่น้องกัน
คุณสามารถใช้คุณสมบัติโหนดต่อไปนี้เพื่อนำทางระหว่างโหนดด้วย จาวาสคริปต์:
<รหัส class="w3-codespan">parentNode
<รหัส class="w3-codespan">childNodes[nodenumber]
<รหัส class="w3-codespan">firstChild
<รหัส class="w3-codespan">lastChild
nextSibling
previousSibling
ข้อผิดพลาดทั่วไปในการประมวลผล DOM คือการคาดหวังว่าโหนดองค์ประกอบจะมีข้อความ
<title
id="demo">DOM Tutorial</title>
โหนดองค์ประกอบ <title>
(ในตัวอย่างด้านบน) ไม่มี มีข้อความ
ประกอบด้วยโหนดข้อความที่มีค่า "DOM Tutorial"
ค่าของโหนดข้อความสามารถเข้าถึงได้โดยคุณสมบัติ innerHTML
ของโหนด:
myTitle = document.getElementById("demo").innerHTML;
การเข้าถึงคุณสมบัติ innerHTML เหมือนกับการเข้าถึง nodeValue
ของลูกคนแรก:
myTitle = document.getElementById("demo").firstChild.nodeValue;
การเข้าถึงลูกคนแรกสามารถทำได้ดังนี้:
myTitle = document.getElementById("demo").childNodes[0].nodeValue;
ตัวอย่างต่อไปนี้ทั้งหมด (3) ดึงข้อความขององค์ประกอบ <h1>
และคัดลอก ลงในองค์ประกอบ <p>
:
<html>
<body>
<h1 id="id01">My First Page</h1>
<p id="id02"></p>
<script>
document.getElementById("id02").innerHTML
= document.getElementById("id01").innerHTML;
</script>
</body>
</html>
ลองด้วยตัวคุณเอง →
<!DOCTYPE html>
<html>
<body>
<h1 id="id01">My First Page</h1>
<p id="id02"></p>
<script>
document.getElementById("id02").innerHTML = document.getElementById("id01").innerHTML;
</script>
</body>
</html>
<html>
<body>
<h1 id="id01">My First Page</h1>
<p id="id02"></p>
<script>
document.getElementById("id02").innerHTML = document.getElementById("id01").firstChild.nodeValue;
</script>
</body>
</html>
ลองด้วยตัวคุณเอง →
<!DOCTYPE html>
<html>
<body>
<h1 id="id01">My First Page</h1>
<p id="id02"></p>
<script>
document.getElementById("id02").innerHTML = document.getElementById("id01").firstChild.nodeValue;
</script>
</body>
</html>
<html>
<body>
<h1 id="id01">My First Page</h1>
<p id="id02">Hello!</p>
<script>
document.getElementById("id02").innerHTML = document.getElementById("id01").childNodes[0].nodeValue;
</script>
</body>
</html>
ลองด้วยตัวคุณเอง →
<!DOCTYPE html>
<html>
<body>
<h1 id="id01">My First Page</h1>
<p id="id02"></p>
<script>
document.getElementById("id02").innerHTML = document.getElementById("id01").childNodes[0].nodeValue;
</script>
</body>
</html>
ในบทช่วยสอนนี้ เราใช้คุณสมบัติ innerHTML เพื่อดึงเนื้อหาของ องค์ประกอบ HTML
อย่างไรก็ตามการเรียนรู้ วิธีอื่นๆ ข้างต้นมีประโยชน์ในการทำความเข้าใจโครงสร้างต้นไม้และ การนำทางของ DOM
มีคุณสมบัติพิเศษสองประการที่อนุญาตให้เข้าถึงเอกสารฉบับเต็มได้:
document.body
- เนื้อความของเอกสาร
document.documentElement
- เอกสารฉบับเต็ม
<html>
<body>
<h2>JavaScript HTMLDOM</h2>
<p>Displaying document.body</p>
<p
id="demo"></p>
<script>
document.getElementById("demo").innerHTML
= document.body.innerHTML;
</script>
</body>
</html>
ลองด้วยตัวคุณเอง →
<!DOCTYPE html>
<html>
<body>
<h2>JavaScript HTMLDOM</h2>
<p>Displaying document.body</p>
<p id="demo"></p>
<script>
document.getElementById("demo").innerHTML = document.body.innerHTML;
</script>
</body>
</html>
<html>
<body>
<h2>JavaScript HTMLDOM</h2>
<p>Displaying document.documentElement</p>
<p id="demo"></p>
<script>
document.getElementById("demo").innerHTML =
document.documentElement.innerHTML;
</script>
</body>
</html>
ลองด้วยตัวคุณเอง →
<!DOCTYPE html>
<html>
<body>
<h2>JavaScript HTMLDOM</h2>
<p>Displaying document.documentElement</p>
<p id="demo"></p>
<script>
document.getElementById("demo").innerHTML = document.documentElement.innerHTML;
</script>
</body>
</html>
คุณสมบัติ nodeName
ระบุชื่อของโหนด
nodeName เป็นแบบอ่านอย่างเดียว
nodeName ของโหนดองค์ประกอบจะเหมือนกับชื่อแท็ก
nodeName ของโหนดแอตทริบิวต์คือชื่อแอตทริบิวต์
nodeName ของโหนดข้อความจะเป็น #text เสมอ
nodeName ของโหนดเอกสารจะเป็น #document เสมอ
<h1 id="id01">My First Page</h1>
<p id="id02"></p>
<script>
document.getElementById("id02").innerHTML
= document.getElementById("id01").nodeName;
</script>
ลองด้วยตัวคุณเอง →
<!DOCTYPE html>
<html>
<body>
<h1 id="id01">My First Page</h1>
<p id="id02"></p>
<script>
document.getElementById("id02").innerHTML = document.getElementById("id01").nodeName;
</script>
</body>
</html>
หมายเหตุ: nodeName
จะมีชื่อแท็กตัวพิมพ์ใหญ่ขององค์ประกอบ HTML เสมอ
nodeValue
คุณสมบัติระบุค่าของโหนด
nodeValue สำหรับโหนดองค์ประกอบคือ null
nodeValue สำหรับโหนดข้อความคือตัวข้อความเอง
nodeValue สำหรับโหนดแอตทริบิวต์คือค่าแอตทริบิวต์
คุณสมบัติ nodeType
เป็นแบบอ่านอย่างเดียว มันจะส่งกลับประเภทของโหนด
<h1 id="id01">My First Page</h1>
<p id="id02"></p>
<script>
document.getElementById("id02").innerHTML
= document.getElementById("id01").nodeType;
</script>
ลองด้วยตัวคุณเอง →
<!DOCTYPE html>
<html>
<body>
<h1 id="id01">My First Page</h1>
<p id="id02"></p>
<script>
document.getElementById("id02").innerHTML = document.getElementById("id01").nodeType;
</script>
</body>
</html>
คุณสมบัติ nodeType ที่สำคัญที่สุดคือ:
Node | Type | Example |
---|---|---|
ELEMENT_NODE | 1 | <h1 class="heading">W3Schools</h1> |
ATTRIBUTE_NODE | 2 | class = "heading" (deprecated) |
TEXT_NODE | 3 | W3Schools |
COMMENT_NODE | 8 | <!-- This is a comment --> |
DOCUMENT_NODE | 9 | The HTML document itself (the parent of <html>) |
DOCUMENT_TYPE_NODE | 10 | <!Doctype html> |
ประเภท 2 เลิกใช้แล้วใน HTML DOM (แต่ใช้งานได้) ไม่ได้เลิกใช้แล้วใน XML DOM