DOM 是 W3C(萬維網聯盟)的標準。DOM 定義了訪問 HTML 和 XML 文檔的標準:javascript
"W3C 文檔對象模型(DOM)是中立於平臺和語言的接口,它容許程序和腳本動態地訪問和更新文檔的內容、結構和樣式。"html
W3C DOM 標準被分爲 3 個不一樣的部分:java
根據 W3C 的 HTML DOM 標準,HTML 文檔中的全部內容都是節點(NODE):node
節點(自身)屬性:自己具備的屬性。瀏覽器
導航屬性:操做節點的屬性。app
(一)nodeName 屬性含有某個節點的名稱。函數
元素節點的 nodeName 是標籤名稱ui
屬性節點的 nodeName 是屬性名稱this
文本節點的 nodeName 永遠是 #textspa
文檔節點的 nodeName 永遠是 #document
註釋:nodeName 所包含的 XML 元素的標籤名稱永遠是大寫的
(二)nodeValue
對於文本節點,nodeValue 屬性包含文本。
對於屬性節點,nodeValue 屬性包含屬性值。
nodeValue 屬性對於文檔節點和元素節點是不可用的。
(三)nodeType
nodeType 屬性可返回節點的類型。
最重要的節點類型是:
元素類型 節點類型
元素element 1
屬性attr 2
文本text 3
註釋comments 8
文檔document 9
咱們先看一個例子:
<!DOCTYPE html>
<html lang="UTF8">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<body>
<div id="div1">
<div id="div2"></div>
<p>hello world!</p>
</div>
</body>
<script>
var div=document.getElementById("div2");
console.log(div.nextSibling.nodeName); //結果會是神馬??
</script>
</html>
上面的例子,咋看會輸出p節點,可是,結果偏偏不是!
parentElement // 父節點標籤元素,經過父節點再找其餘節點 children // 全部子標籤,一次獲取全部子標籤 firstElementChild // 第一個子標籤元素 lastElementChild // 最後一個子標籤元素 nextElementtSibling // 下一個兄弟標籤元素 previousElementSibling // 上一個兄弟標籤元素
父(parent),子(child)和同胞(sibling)等術語用於描述這些關係。
父節點擁有子節點。同級的子節點被稱爲同胞(兄弟或姐妹)。
修改 HTML DOM 意味着許多不一樣的方面:
a、改變HTML內容(innerHTML)
document.getElementById("p1").innerHTML="New text!";
b、改變CSS樣式
<p id=
"p2"
>Hello world!</p>
document.getElementById(
"p2"
).style.color=
"blue"
;
<p id="p1">Hello world!</p> <p id="p2">Hello world!</p> <script> document.getElementById("p2").style.color="blue"; document.getElementById("p2").style.fontFamily="Arial"; document.getElementById("p2").style.fontSize="larger"; </script>
d、建立新的HTML元素
e、刪除已有的HTML元素
注意:
可否在不引用父元素的狀況下刪除某個元素?
很抱歉。DOM 須要瞭解您須要刪除的元素,以及它的父元素。
經常使用刪除元素方法:
var child=document.getElementById("p1"); child.parentNode.removeChild(child);
f、替換HTM元素
<div id="div1"> <p id="p1">這是一個段落。</p> <p id="p2">這是另一個段落。</p> </div> <script> var parent=document.getElementById("div1"); #獲取父級元素 var child=document.getElementById("p1"); #獲取子元素 var para=document.createElement("p"); #建立p標籤 var node=document.createTextNode("這是一個新的段落。"); #給p標籤添加內容<p>這是一個新的段落。</p> para.appendChild(node); #把內容放入p裏面 parent.replaceChild(para,child); #父元素添加子節點 </script>
g、使用事件
<input type="button" onclick="document.body.style.backgroundColor='lavender';" value="修改背景顏色">
h、class的操做
HTML DOM 容許 JavaScript 對 HTML 事件做出反應。
經常使用的事件:
onclick 當用戶點擊某個對象時調用的事件句柄。 ondblclick 當用戶雙擊某個對象時調用的事件句柄。 onfocus 元素得到焦點。 //練習:輸入框 onblur 元素失去焦點。 應用場景:用於表單驗證,用戶離開某個輸入框時,表明已經輸入完了,咱們能夠對它進行驗證. onchange 域的內容被改變。 應用場景:一般用於表單元素,當元素內容被改變時觸發.(三級聯動) onkeydown 某個鍵盤按鍵被按下。 應用場景: 當用戶在最後一個輸入框按下回車按鍵時,表單提交. onkeypress 某個鍵盤按鍵被按下並鬆開。 onkeyup 某個鍵盤按鍵被鬆開。 onload 一張頁面或一幅圖像完成加載。 onmousedown 鼠標按鈕被按下。 onmousemove 鼠標被移動。 onmouseout 鼠標從某元素移開。 onmouseover 鼠標移到某元素之上。 onmouseleave 鼠標從元素離開 onselect 文本被選中。 onsubmit 確認按鈕被點擊。
實例:
一、鼠標點擊(onclick)
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> <title>小白教程</title> </head> <body> <h1 onclick="this.innerHTML='hello guy!'">點擊文本!</h1> </body> </html>
二、鼠標雙擊(ondbclick)
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> <title>小白教程</title> </head> <body> <button ondblclick="db(this)">雙擊我,改變你的人生</button> </body> <script> function db(arg){ arg.innerHTML='hello world!'; } </script> </html>
注意:onclick後面能夠直接寫函數的內容,也能夠直接調用函數。
三、鼠標聚焦(onfocus)
<!DOCTYPE html> <html> <head> <script> function myFunction(x) { x.style.background="yellow"; } </script> </head> <body> 請輸入內容:<input type="text" onfocus="myFunction(this)"> <p>當輸入內容得到焦點時,會觸發顏色背景爲黃色。</p> </body> </html>
結果爲:
四、按鍵改變(onmousedown和onmouseup)
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> </head> <body> <!--開始爲藍色,按下爲黃色,鬆開爲紅色--> <div onmousedown="mDown(this)" onmouseup="mUp(this)" style="background-color:blue;width:150px;height:20px;padding:40px;">鼠標按鍵準備按下</div> <script> function mDown(obj) { obj.style.backgroundColor="yellow"; obj.innerHTML="鼠標按鍵已按下" } function mUp(obj) { obj.style.backgroundColor="red"; obj.innerHTML="此時鼠標已鬆開" } </script> </body> </html>
五、鼠標改變(onmouseover和onmouseout)
<!DOCTYPE html> <html> <body> <div onmouseover="mOver(this)" onmouseout="mOut(this)" style="background-color:green;width:120px;height:20px;padding:40px;color:#ffffff;">把鼠標移到上面</div> <script> function mOver(obj) { obj.innerHTML="謝謝" } function mOut(obj) { obj.innerHTML="把鼠標移到上面" } </script> </body> </html>
六、文本選中(onselect)
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> <title>小白教程</title> </head> <body> <input type="text" value="Hello world!" onselect="alert('You have selected some of the text.')" /> </body> </html>
七、改變(onchange)
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> </head> <head> <script> function myFunction(){ var x=document.getElementById("fname"); if (isNaN(x.value)){ x.value=x.value.toUpperCase(); }else{ alert('請輸入字母!'); } } </script> </head> <body> 輸入你的名字: <input type="text" id="fname" onchange="myFunction()"> <p>當你離開輸入框後,函數將被觸發,將小寫字母轉爲大寫字母。</p> </body> </html>
八、確認按鈕被點擊
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> <title>小白教程</title> </head> <body> <form id="form" > <input type="text"/> <input type="submit" value="點我!" /> </form> <script type="text/javascript"> //阻止表單提交方式1(). //onsubmit 命名的事件函數,能夠接受返回值. 其中返回false表示攔截表單提交.其餘爲放行. var ele=document.getElementById("form"); ele.onsubmit=function(event) { // alert("驗證失敗 表單不會提交!"); // return false; // 阻止表單提交方式2 event.preventDefault(); ==>通知瀏覽器不要執行與事件關聯的默認動做。 alert("驗證失敗 表單不會提交!"); event.preventDefault(); } </body> </html>