많은 js dom 학습 자료를 읽은 후 이 자료가 매우 상세하다는 것을 알았으므로
1. DOM 기본
1. 문서--가장 다른 모든 노드가 연결되는 최상위 노드입니다.
DocumentType - 하위 노드를 포함할 수 없는 DTD 참조( 구문 사용)의 객체 표현입니다.
DocumentFragment - Document와 같은 다른 노드를 저장할 수 있습니다.
요소 -
Attr - 속성 이름과 속성 값의 쌍을 나타냅니다. 이 노드 유형은 하위 노드를 포함할 수 없습니다.
텍스트 - XML 문서의 시작 태그와 종료 태그 사이에 있거나 CDataSection에 포함된 일반 텍스트를 나타냅니다. 이 노드 유형은 하위 노드를 포함할 수 없습니다.
CDataSection - 의 객체 표현입니다. 이 노드 유형은 텍스트 노드 Text만 하위 노드로 포함할 수 있습니다.
엔티티 - 와 같은 DTD의 엔터티 정의를 나타냅니다. 이 노드 유형은 하위 노드를 포함할 수 없습니다.
EntityReference - "와 같은 엔터티 참조를 나타냅니다. 이 노드 유형은 하위 노드를 포함할 수 없습니다.
ProcessingInstruction - PI를 나타냅니다. 이 노드 유형은 하위 노드를 포함할 수 없습니다.
Comment - XML 주석을 나타냅니다. 이 노드
표시법 - DTD에 정의된 표기법을 나타냅니다.
노드 인터페이스는 모든 노드 유형에 포함되는 속성과 메서드를 정의합니다.
DOM은 노드 외에도 노드와 함께 사용할 수 있지만 DOM 문서의 필수 부분은 아닌 일부 도우미 개체를 정의합니다.
NodeList - 요소의 하위 노드를 나타내는 데 사용되는 값에 따라 색인이 지정된 노드 배열입니다.
NamedNodeMap - 요소 특성을 나타내는 데 사용되는 값과 이름으로 색인된 노드 테이블입니다.
2. 관련 노드에 액세스
다음 섹션에서 다음 HTML 페이지를 고려하세요
<html> <head> <title>DOM Example</title> </head> <body> <p>Hello World!</p> <p>Isn't this exciting?</p> <p>You're learning to use the DOM!</p> </body> </html>
Hello world!
<html> <head> <title>createElement() Example</title> <script type="text/javascript"> function createMessage() { var oP = document.createElement("p"); var oText = document.createTextNode("Hello World!"); oP.appendChild(oText); document.body.appendChild(oP); } </script> </head> <body onload="createMessage()"> </body> </html>
removeChild()、replaceChild()、insertBefore()
删除节点
<html> <head> <title>removeChild() Example</title> <script type="text/javascript"> function removeMessage() { var oP = document.body.getElementsByTagName("p")[0]; oP.parentNode.removeChild(oP); } </script> </head> <body onload="removeMessage()"> <p>Hello World!</p> </body> </html>
替换
<html> <head> <title>replaceChild() Example</title> <script type="text/javascript"> function replaceMessage() { var oNewP = document.createElement("p"); var oText = document.createTextNode("Hello Universe!"); oNewP.appendChild(oText); var oOldP = document.body.getElementsByTagName("p")[0]; oOldP.parentNode.replaceChild(oNewP, oOldP); } </script> </head> <body onload="replaceMessage()"> <p>Hello World!</p> </body> </html>
新消息添加到旧消息之前
<html> <head> <title>insertBefore() Example</title> <script type="text/javascript"> function insertMessage() { var oNewP = document.createElement("p"); var oText = document.createTextNode("Hello Universe!"); oNewP.appendChild(oText); var oOldP = document.getElementsByTagName("p")[0]; document.body.insertBefore(oNewP, oOldP); } </script> </head> <body onload="insertMessage()"> <p>Hello World!</p> </body> </html>
createDocumentFragment()
一旦把节点添加到document.body(或者它的后代节点)中,页面就会更新并反映出这个变化。对于少量的更新,这是很好的,然而,当要向document添加大量数据时,如果逐个添加这些变动,这个过程有可能会十分缓慢。为解决这个问题,可以创建一个文档碎片,把所有的新节点附加其上,然后把文档碎片的内容一次性添加到document中,假如想创建十个新段落。
<html> <head> <title>insertBefore() Example</title> <script type="text/javascript"> function addMessages() { var arrText = ["first", "second", "third", "fourth", "fifth", "sixth", "seventh", "eighth", "ninth", "tenth"]; var oFragment = document.createDocumentFragment(); for (var i=0; i < arrText.length; i++) { var oP = document.createElement("p"); var oText = document.createTextNode(arrText[i]); oP.appendChild(oText); oFragment.appendChild(oP); } document.body.appendChild(oFragment); } </script> </head> <body onload="addMessages()"> </body> </html>
6.让特性像属性一样
大部分情况下,HTML DOM元素中包含的所有特性都是可作为属性。
假设有如下图像元素:
如果要使用核心的DOM来获取和设置src和border特性,那么要用getAttribute()和setAttribute()方法:
alert(oImg.getAttribute("src"));
alert(oImg.getAttribute("border"));
oImg.setAttribute("src","mypicture2.jpg");
oImg.setAttribute("border",1);
然而,使用HTML DOM,可以使用同样名称的属性来获取和设置这些值:
alert(oImg.src);
alert(oImg.border);
oImg.src="mypicture2.jpg";
oImg.border ="1";
唯一的特性名和属性名不一样的特例是class属性,它是用来指定应用于某个元素的一个CSS类,因为class在ECMAScript中是一个保留字,在javascript中,它不能被作为变量名、属性名或都函数名。于是,相应的属性名就变成了className;
注:IE在setAttribute()上有很大的问题,最好尽可能使用属性。
7.table方法
为了协助建立表格,HTML DOM给
特性/方法 | 说明 |
caption | 指向 |
tBodies | |
tFoot | 指向 |
tHead | 指向元素(如果存在) |
rows | 表格中所有行的集合 |
createTHead() | 创建元素并将其放入表格 |
createTFood() | 创建 |
createCpation() | 创建 |
deleteTHead() | 删除元素 |
deleteTFood() | 删除 |
deleteCaption() | 删除 |
deleteRow(position) | 删除指定位置上的行 |
insertRow(position) | 在rows集合中的指定位置上插入一个新行 |
特性/方法 | 说明 |
rows | |
deleteRow(position) | 删除指定位置上的行 |
insertRow(position) | 在rows集合中的指定位置上插入一个新行 |
特性/方法 | 说明 |
cells | |
deleteCell(postion) | 删除给定位置上的单元格 |
insertCell(postion) | 在cells集合的给点位置上插入一个新的单元格 |
8. DOM 탐색
NodeIterator, TreeWalker
DOM Level2 기능은 Mozilla 및 Konqueror/Safari에서만 사용할 수 있으며 여기서는 소개하지 않습니다.