JavaScript HTML DOM Navigation
- 上一页 DOM 事件监听程序
- 下一页 DOM 节点
Gennem HTML DOM kan du bruge noderelationer til at navigere i nodetræet.
DOM 节点
Ifølge W3C HTML DOM-standard er alt i HTML-dokumentet en node:
- Hele dokumentet er en dokumentnode
- Hvert HTML-element er en elementnode
- Teksten inden for HTML-elementer er en tekstnode
- Hver HTML-egenskab er en egenskabsnode
- Alle kommentarer er kommentarnoder

Med HTML DOM kan alle noder i nodetræet tilgås ved hjælp af JavaScript.
Man kan oprette nye noder, samt ændre og slette alle noder.
Noderelationer
Noder i nodetræet har en vis hierarkisk relation til hinanden.
- Termer (fader, barn og kolleger, parent, child og sibling) bruges til at beskrive disse relationer.
- I nodetræet kaldes toppen rod (rodnoden er rodnoden).
- Hver node har en fadernode, med undtagelse af roden (rodnoden har ingen fadernode).
- Noder kan have et bestemt antal undernoder
- Kolleger (brødre eller søstre) refererer til noder, der har samme fader.
<html> <head> <title>DOM tutorial</title> </head> <body> <h1>DOM første lektion</h1> <p>Hello world!</p> </body> </html>

Fra det ovenstående HTML kan du læse følgende information:
- html er rodnoden
- html har ingen fader
- html er faderen til head og body
- head er den første underen af html
- <body> er <html> sidste under
Samtidig:
- <head> har en under: <title>
- <title> har en under (tekstknude): "DOM-tutorial"
- <body> har to under: <h1> og <p>
- <h1> har en under: "DOM første lektion"
- <p> har en under: "Hello world!"
- <h1> og <p> er søskende
Navigere mellem noder
Med JavaScript kan du bruge følgende nodenegenskaber til at navigere mellem noder:
- parentNode
- childNodes[nodenumber]
- firstChild
- lastChild
- nextSibling
- previousSibling
underknuder og knudeværdier
En almindelig fejl i DOM-behandling er at tro, at elementknuder indeholder tekst.
Eksempel:
<title id="demo">DOM-tutorial</title>
(i ovenstående eksempel)elementknuden <title> Inkluderer ikketekst.
Den indeholder teksten "DOM-tutorial"tekstknude.
Tekstknudens værdi kan fås gennem knudens innerHTML
egenskab for at tilgå:
var myTitle = document.getElementById("demo").innerHTML;
Adgang til innerHTML-egenskaben svarer til adgang til den første undernode nodeValue
:
var myTitle = document.getElementById("demo").firstChild.nodeValue;
Man kan også tilgå den første undernode på denne måde:
var myTitle = document.getElementById("demo").childNodes[0].nodeValue;
Følgende tre eksempler henter <h1>
Elementets tekst og kopier til <p>
Elementet indeholder:
Eksempel 1
<html> <body> <h1 id="id01">Min første side</h1> <p id="id02">Hello!</p> <script> document.getElementById("id02").innerHTML = document.getElementById("id01").innerHTML; </script> </body> </html>
Eksempel 2
<html> <body> <h1 id="id01">Min første side</h1> <p id="id02">Hello!</p> <script> document.getElementById("id02").innerHTML = document.getElementById("id01").firstChild.nodeValue; </script> </body> </html>
Eksempel 3
<html> <body> <h1 id="id01">Min første side</h1> <p id="id02">Hello!</p> <script> document.getElementById("id02").innerHTML = document.getElementById("id01").childNodes[0].nodeValue; </script> </body> </html>
InnerHTML
I denne tutorial bruger vi innerHTML
Hent indholdet af HTML-elementet.
Men, at lære de andre metoder hjælper med at forstå DOM's træstruktur og navigation.
DOM rodnode
Der er to specielle egenskaber, der giver adgang til hele dokumentet:
- document.body - Dokumentets body
- document.documentElement - Hele dokumentet
Eksempel
<html> <body> <p>Hello World!</p> <div> <p>DOM er meget nyttigt!</p> <p>Dette eksempel viser <b>document.body</b> egenskaben.</p> </div> <script> alert(document.body.innerHTML); </script> </body> </html>
Eksempel
<html> <body> <p>Hello World!</p> <div> <p>DOM er meget nyttigt!</p> <p>Dette eksempel viser <b>document.documentElement</b> egenskaben.</p> </div> <script> alert(document.documentElement.innerHTML); </script> </body> </html>
nodeName egenskab
nodeName
egenskab definerer nodens navn.
- nodeName er skrivebeskyttet
- Elementnodens nodeName svarer til mærkenavnet
- Egenskabens nodeName er navnet på egenskaben
- Tekstnodens nodeName er altid #text
- Dokumentnodens nodeName er altid #document
Eksempel
<h1 id="id01">Min første webside</h1> <p id="id02">Hello!</p> <script> document.getElementById("id02").innerHTML = document.getElementById("id01").nodeName; </script>
Bemærk:nodeName indeholder altid HTML-elementets store skriftlignende navn.
nodeValue egenskab
nodeValue
egenskab definerer nodens værdi.
- elementnodens nodeValue er undefined
- tekstnodens nodeValue er teksten
- egenskabens nodeValue er værdien af egenskaben
nodeType egenskab
nodeType
egenskab returnerer nodens type.nodeType
er skrivebeskyttet.
Eksempel
<h1 id="id01">Min første webside</h1> <p id="id02">Hello!</p> <script> document.getElementById("id02").innerHTML = document.getElementById("id01").nodeType; </script>
最重要的 nodeType 属性是:
节点 | 类型 | 例子 |
---|---|---|
ELEMENT_NODE | 1 | <h1 class="heading">W3School</h1> |
ATTRIBUTE_NODE | 2 | class = "heading" (弃用) |
TEXT_NODE | 3 | W3School |
COMMENT_NODE | 8 | <!-- 这是注释 --> |
DOCUMENT_NODE | 9 | HTML 文档本身(<html> 的父) |
DOCUMENT_TYPE_NODE | 10 | <!Doctype html> |
Type 2 在 HTML DOM 中已弃用。XML DOM 中未弃用。
- 上一页 DOM 事件监听程序
- 下一页 DOM 节点