Javascript DOM學習總結
1. 節點及其型別:
北京
1). 元素節點
2). 屬性節點: 元素的屬性, 可以直接透過屬性的方式來操作.
3). 文字節點: 是元素節點的子節點, 其內容為文字.
2. 在 html 文件的什麼位置編寫 js 程式碼?
1). 直接在 html 頁面中書寫程式碼.
Click Me!
缺點:
①. js 和 html 強耦合, 不利於程式碼的維護
②. 若 click 相應函式是比較複雜的, 則需要先定義一個函式, 然後再在 onclick屬性中完成對函式的引用, 比較麻煩
2). 一般地, 不能在 body 節點之前來直接獲取 body 內的節點, 因為此時 html 文件樹還沒有載入完成, 獲取不到指定的節點:
Untitled Document
var cityNode = document.getElementById("city");
//列印結果為 null.
alert(cityNode);
3). 可以在整個 html 文件的最後編寫類似程式碼, 但這不符合習慣
4). 一般地, 在 body 節點之前編寫 js 程式碼, 但需要利用 window.onload 事件,該事件在當前文件完全載入之後被觸發, 所以其中的程式碼可以獲取到當前文件的任何節點.
Untitled Document
window.onload = function(){
var cityNode = document.getElementById("city");
alert(cityNode);
};
5)為window.onload賦值的方式是;
window.onload = function(){
//
}
也可以
function myfunc(){
//
}
window.onload = myfunc;
但不能這樣:因為這樣的賦值將導致myfunc函式執行,而賦值給window.onload的將是函式的執行結果,賦值的應該是一個函式的引用。window.onload=myfunc();
3. 獲取元素節點:
1).document.getElementById: 根據 id 屬性獲取對應的單個節點,id應該保證在文件中的唯一性
var element = document.getElementById("id");
2).document.getElementsByTagName:
根據標籤名獲取指定節點名字的陣列, 陣列物件 length屬性可以獲取陣列的長度
var paras = document.getElementsByTagName(“p”);
3).document.getElementsByName:
根據節點的 name 屬性獲取符合條件的節點陣列, 但 ie 的實現方式和 W3C 標準有差別:
在 html 文件中若某節點(li)沒有 name 屬性,則 ie 使用 getElementsByName 不能獲取到節點陣列, 但火狐可以.
var names= document.getElementsByName(“name”);
4). element.hasChildNodes();
該方法用來檢查一個元素是否有子節點,返回值是 true 或 false
文字節點和屬性節點不可能再包含任何子節點,所以對這兩類節點使用 hasChildNodes 方法的返回值永遠是 false.
如果 hasChildNodes 方法的返回值是 false,則 childNodes,firstChild,lastChild 將是空陣列和空字串
var booleanValue = element.hasChildNodes();
4. 獲取屬性節點:透過元素節點.的方式來讀寫屬性
透過元素節點的 getAttributeNode 方法來獲取屬性節點,然後在透過 nodeValue 來讀寫屬性值
5. 獲取元素節點的子節點(**只有元素節點才有子節點!!):
1). childNodes 屬性獲取全部的子節點, 但該方法不實用. 因為如果要獲取指定的節點的指定子節點的集合, 可以直接呼叫元素節點的 getElementsByTagName() 方法來獲取.
2). firstChild 屬性獲取第一個子節點,通常用於獲取文字節點。
3). lastChild 屬性獲取最後一個子節點
6. 獲取文字節點:
1)獲取文字節點所在的元素節點
var bjnode=document.getElementById("bj");
2)呼叫firstChild方法找到文字節點
var bjtextnode=bjnode.firstChild;
3)透過操作文字節點的屬性來讀寫文字節點的值
alert(bjtextnode.nodeValue);
bjtextnode.nodeValue="ss";
7.節點的屬性:
1).nodeName: 代表當前節點的名字. 只讀屬性.
**如果給定節點是一個文字節點, nodeName 屬性將返回內容為 #text 的字串
2).nodeType:返回一個整數, 這個數值代表著給定節點的型別. 只讀屬性.
1 -- 元素節點, 2 -- 屬性節點, 3 -- 文字節點
3).nodeValue:返回給定節點的當前值(字串). 可讀寫的屬性
①. 元素節點, 返回值是 null.
②. 屬性節點: 返回值是這個屬性的值
③. 文字節點: 返回值是這個文字節點的內容
8. 建立元素節點:var linode=document.createElement("li");
按照給定的標籤名建立一個新的元素節點.
方法只有一個引數:被建立的元素節點的名字, 是一個字串.
方法的返回值:是一個指向新建節點的引用指標. 返回值是一個元素節點, 所以它的 nodeType 屬性值等於 1.
**新元素節點不會自動新增到文件裡, 它只是一個存在於 JavaScript 上下文的物件.
9.建立屬性節點:先需要建立一個元素節點,然後透過.的方式為其屬性賦值就可以了
var anode=document.createElement("a");
anode.href="deleteEmp?id=xxx";
10. 建立文字節點:
1). createTextNode(): var dtnode=document.createTextNode("delete")
建立一個包含著給定文字的新文字節點. 這個方法的返回值是一個指向新建文字節點引用指標. 它是一個文字節點, 所以它的 nodeType 屬性等於 3.
方法只有一個引數:新建文字節點所包含的文字字串. 新元素節點不會自動新增到文件裡
11. 為元素節點新增子節點:
1). appendChild(): var reference = element.appendChild(newChild): 給定子節點 newChild 將成為給定元素節點 element 的最後一個子節點.
方法的返回值是一個指向新增子節點的引用指標.
var tr=document.createElement("tr");
var nametd=document.createElement("td");
tr.appendChild(nametd);
12. 節點的替換:
1). replaceChild(): 把一個給定父元素裡的一個子節點替換為另外一個子節點
element.replaceChild(newChild,oldChild);
返回值是一個指向已被替換的那個子節點的引用指標
var bjnode=document.getElementById("bj");
var rlnode=document.getElementById("rl");
var gamenode=document.getElementById("game");
gamenode.replaceChild(bjnode,rlnode);
2). 該節點除了替換功能以外還有移動的功能.
3). 該方法只能完成單向替換, 若需要使用雙向替換, 需要自定義函式:
/**
* 互換 aNode 和 bNode
* @param {Object} aNode
* @param {Object} bNode
*/
function replaceEach(aNode, bNode){
if(aNode == bNode){
return;
}
var aParentNode = aNode.parentNode;
//若 aNode 有父節點
if(aParentNode){
var bParentNode = bNode.parentNode;
//若 bNode 有父節點
if(bParentNode){
var tempNode = aNode.cloneNode(true);
bParentNode.replaceChild(tempNode, bNode);
aParentNode.replaceChild(bNode, aNode);
}
}
}
13. 插入節點:
1). insertBefore(): 把一個給定節點插入到一個給定元素節點的給定子節點的前面
element.insertBefore(newNode,targetNode);
節點 newNode 將被插入到元素節點 element 中並出現在節點 targetNode 的前面. 節點 targetNode 必須是 element 元素的一個子節點。
var citynode=document.getElementById("city");
var bjnode=document.getElementById("bj");
var rlnode=document.getElementById("rl");
citynode.insertBefore(rlnode,bjnode);
2). 自定義 insertAfter() 方法
/**
* 將 newChild 插入到 refChild 的後邊
* @param {Object} newChild
* @param {Object} refChild
*/
function insertAfter(newChild, refChild){
var refParentNode = refChild.parentNode;
//判斷 refChild 是否存在父節點
if(refParentNode){
//判斷 refChild 節點是否為其父節點的最後一個子節點
if(refChild == refParentNode.lastChild){
refParentNode.appendChild(newChild);
}else{
refParentNode.insertBefore(newChild, refChild.nextSibling);
}
}
}
14. 刪除節點:
1). removeChild(): 從一個給定元素裡刪除一個子節點
element.removeChild(node);
返回值是一個指向已被刪除的子節點的引用指標. 某個節點被 removeChild() 方法刪除時, 這個節點所包含的所有子節點將同時被刪除.
如果想刪除某個節點, 但不知道它的父節點是哪一個, parentNode 屬性可以幫忙。
var bjnode=document.getElementById("bj");
bjnode.parentNode.removeChild(bjnode);
15. innerHTML屬性:
1)非標準,但所有的瀏覽器都支援
2)讀寫屬性,讀寫某HTML元素的HTML內容
var citynode=document.getElementById("city");
alert(citynode.innerHTML);
1). 元素節點
2). 屬性節點: 元素的屬性, 可以直接透過屬性的方式來操作.
3). 文字節點: 是元素節點的子節點, 其內容為文字.
2. 在 html 文件的什麼位置編寫 js 程式碼?
1). 直接在 html 頁面中書寫程式碼.
Click Me!
缺點:
①. js 和 html 強耦合, 不利於程式碼的維護
②. 若 click 相應函式是比較複雜的, 則需要先定義一個函式, 然後再在 onclick屬性中完成對函式的引用, 比較麻煩
2). 一般地, 不能在 body 節點之前來直接獲取 body 內的節點, 因為此時 html 文件樹還沒有載入完成, 獲取不到指定的節點:
Untitled Document
var cityNode = document.getElementById("city");
//列印結果為 null.
alert(cityNode);
3). 可以在整個 html 文件的最後編寫類似程式碼, 但這不符合習慣
4). 一般地, 在 body 節點之前編寫 js 程式碼, 但需要利用 window.onload 事件,該事件在當前文件完全載入之後被觸發, 所以其中的程式碼可以獲取到當前文件的任何節點.
Untitled Document
window.onload = function(){
var cityNode = document.getElementById("city");
alert(cityNode);
};
5)為window.onload賦值的方式是;
window.onload = function(){
//
}
也可以
function myfunc(){
//
}
window.onload = myfunc;
但不能這樣:因為這樣的賦值將導致myfunc函式執行,而賦值給window.onload的將是函式的執行結果,賦值的應該是一個函式的引用。window.onload=myfunc();
3. 獲取元素節點:
1).document.getElementById: 根據 id 屬性獲取對應的單個節點,id應該保證在文件中的唯一性
var element = document.getElementById("id");
2).document.getElementsByTagName:
根據標籤名獲取指定節點名字的陣列, 陣列物件 length屬性可以獲取陣列的長度
var paras = document.getElementsByTagName(“p”);
3).document.getElementsByName:
根據節點的 name 屬性獲取符合條件的節點陣列, 但 ie 的實現方式和 W3C 標準有差別:
在 html 文件中若某節點(li)沒有 name 屬性,則 ie 使用 getElementsByName 不能獲取到節點陣列, 但火狐可以.
var names= document.getElementsByName(“name”);
4). element.hasChildNodes();
該方法用來檢查一個元素是否有子節點,返回值是 true 或 false
文字節點和屬性節點不可能再包含任何子節點,所以對這兩類節點使用 hasChildNodes 方法的返回值永遠是 false.
如果 hasChildNodes 方法的返回值是 false,則 childNodes,firstChild,lastChild 將是空陣列和空字串
var booleanValue = element.hasChildNodes();
4. 獲取屬性節點:透過元素節點.的方式來讀寫屬性
透過元素節點的 getAttributeNode 方法來獲取屬性節點,然後在透過 nodeValue 來讀寫屬性值
5. 獲取元素節點的子節點(**只有元素節點才有子節點!!):
1). childNodes 屬性獲取全部的子節點, 但該方法不實用. 因為如果要獲取指定的節點的指定子節點的集合, 可以直接呼叫元素節點的 getElementsByTagName() 方法來獲取.
2). firstChild 屬性獲取第一個子節點,通常用於獲取文字節點。
3). lastChild 屬性獲取最後一個子節點
6. 獲取文字節點:
1)獲取文字節點所在的元素節點
var bjnode=document.getElementById("bj");
2)呼叫firstChild方法找到文字節點
var bjtextnode=bjnode.firstChild;
3)透過操作文字節點的屬性來讀寫文字節點的值
alert(bjtextnode.nodeValue);
bjtextnode.nodeValue="ss";
7.節點的屬性:
1).nodeName: 代表當前節點的名字. 只讀屬性.
**如果給定節點是一個文字節點, nodeName 屬性將返回內容為 #text 的字串
2).nodeType:返回一個整數, 這個數值代表著給定節點的型別. 只讀屬性.
1 -- 元素節點, 2 -- 屬性節點, 3 -- 文字節點
3).nodeValue:返回給定節點的當前值(字串). 可讀寫的屬性
①. 元素節點, 返回值是 null.
②. 屬性節點: 返回值是這個屬性的值
③. 文字節點: 返回值是這個文字節點的內容
8. 建立元素節點:var linode=document.createElement("li");
按照給定的標籤名建立一個新的元素節點.
方法只有一個引數:被建立的元素節點的名字, 是一個字串.
方法的返回值:是一個指向新建節點的引用指標. 返回值是一個元素節點, 所以它的 nodeType 屬性值等於 1.
**新元素節點不會自動新增到文件裡, 它只是一個存在於 JavaScript 上下文的物件.
9.建立屬性節點:先需要建立一個元素節點,然後透過.的方式為其屬性賦值就可以了
var anode=document.createElement("a");
anode.href="deleteEmp?id=xxx";
10. 建立文字節點:
1). createTextNode(): var dtnode=document.createTextNode("delete")
建立一個包含著給定文字的新文字節點. 這個方法的返回值是一個指向新建文字節點引用指標. 它是一個文字節點, 所以它的 nodeType 屬性等於 3.
方法只有一個引數:新建文字節點所包含的文字字串. 新元素節點不會自動新增到文件裡
11. 為元素節點新增子節點:
1). appendChild(): var reference = element.appendChild(newChild): 給定子節點 newChild 將成為給定元素節點 element 的最後一個子節點.
方法的返回值是一個指向新增子節點的引用指標.
var tr=document.createElement("tr");
var nametd=document.createElement("td");
tr.appendChild(nametd);
12. 節點的替換:
1). replaceChild(): 把一個給定父元素裡的一個子節點替換為另外一個子節點
element.replaceChild(newChild,oldChild);
返回值是一個指向已被替換的那個子節點的引用指標
var bjnode=document.getElementById("bj");
var rlnode=document.getElementById("rl");
var gamenode=document.getElementById("game");
gamenode.replaceChild(bjnode,rlnode);
2). 該節點除了替換功能以外還有移動的功能.
3). 該方法只能完成單向替換, 若需要使用雙向替換, 需要自定義函式:
/**
* 互換 aNode 和 bNode
* @param {Object} aNode
* @param {Object} bNode
*/
function replaceEach(aNode, bNode){
if(aNode == bNode){
return;
}
var aParentNode = aNode.parentNode;
//若 aNode 有父節點
if(aParentNode){
var bParentNode = bNode.parentNode;
//若 bNode 有父節點
if(bParentNode){
var tempNode = aNode.cloneNode(true);
bParentNode.replaceChild(tempNode, bNode);
aParentNode.replaceChild(bNode, aNode);
}
}
}
13. 插入節點:
1). insertBefore(): 把一個給定節點插入到一個給定元素節點的給定子節點的前面
element.insertBefore(newNode,targetNode);
節點 newNode 將被插入到元素節點 element 中並出現在節點 targetNode 的前面. 節點 targetNode 必須是 element 元素的一個子節點。
var citynode=document.getElementById("city");
var bjnode=document.getElementById("bj");
var rlnode=document.getElementById("rl");
citynode.insertBefore(rlnode,bjnode);
2). 自定義 insertAfter() 方法
/**
* 將 newChild 插入到 refChild 的後邊
* @param {Object} newChild
* @param {Object} refChild
*/
function insertAfter(newChild, refChild){
var refParentNode = refChild.parentNode;
//判斷 refChild 是否存在父節點
if(refParentNode){
//判斷 refChild 節點是否為其父節點的最後一個子節點
if(refChild == refParentNode.lastChild){
refParentNode.appendChild(newChild);
}else{
refParentNode.insertBefore(newChild, refChild.nextSibling);
}
}
}
14. 刪除節點:
1). removeChild(): 從一個給定元素裡刪除一個子節點
element.removeChild(node);
返回值是一個指向已被刪除的子節點的引用指標. 某個節點被 removeChild() 方法刪除時, 這個節點所包含的所有子節點將同時被刪除.
如果想刪除某個節點, 但不知道它的父節點是哪一個, parentNode 屬性可以幫忙。
var bjnode=document.getElementById("bj");
bjnode.parentNode.removeChild(bjnode);
15. innerHTML屬性:
1)非標準,但所有的瀏覽器都支援
2)讀寫屬性,讀寫某HTML元素的HTML內容
var citynode=document.getElementById("city");
alert(citynode.innerHTML);
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30046312/viewspace-2133078/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【Javascript】DOM程式設計學習總結篇JavaScript程式設計
- Javascript Promise學習過程總結JavaScriptPromise
- JavaScript的字串、陣列以及DOM操作總結JavaScript字串陣列
- js中DOM總結JS
- JavaScript 複習之DOM 概述JavaScript
- JavaScript學習小結JavaScript
- javascript ES5 物件導向的學習總結JavaScript物件
- 學習總結
- JS中DOM操作總結JS
- JavaScript DOM 程式設計藝術 學習筆記01JavaScript程式設計筆記
- JavaScript DOM 程式設計藝術 學習筆記 02JavaScript程式設計筆記
- javaScript 習題總結(持續更新)JavaScript
- ConstraintLayout 學習總結AI
- BOM學習總結
- tkinter學習總結
- vue學習總結Vue
- HSF學習總結
- ElasticSearch 學習總結Elasticsearch
- Storm學習總結ORM
- vue 學習總結Vue
- lua 學習總結
- Angularjs 學習總結AngularJS
- WebRTC學習總結Web
- GCD 學習總結GC
- CompletableFuture學習總結
- awk 學習總結
- MyBatis 學習總結MyBatis
- Maven學習總結Maven
- Ajax學習總結
- JVM學習總結JVM
- mysqlimport學習總結MySqlImport
- WorkFlow學習總結
- JNI 學習總結
- SVG學習總結SVG
- HTML學習總結HTML
- Mybatis學習總結MyBatis
- JavaWeb學習總結JavaWeb
- KUDU學習總結
- pandas 學習總結