文檔對象模型(Document Object Model,縮寫DOM),是W3C組織推薦的處理可擴展置標語言的標準編程接口。javascript
HTML DOM 定義了訪問和操做 HTML 文檔的標準方法。
DOM 將 HTML 文檔表達爲樹結構。php
咱們最爲關心的是,DOM把網頁和腳本以及其餘的編程語言聯繫了起來。DOM屬於瀏覽器,而不是JavaScript語言規範裏的規定的核心內容。html
<script> document.getElementById('id'); //根據ID獲取一個標籤,在文檔中改值必須惟一 document.getElementsByName('name'); //根據name屬性獲取標籤集合,相似於id,name是給元素分配名字,但區別於ID,不是必須惟一. document.getElementsByClassName('classname'); //根據class屬性獲取標籤集合 document.getElementsByTagName('div'); //根據標籤名獲取標籤集合元素 #nav; //id=nav的元素 經過CSS選擇器選取元素 div; //全部<div>元素 經過CSS選擇器選取元素 .warning; //全部在class屬性之中包含了warnning的元素 經過CSS選擇器選取元素 //也能夠使用屬性選擇器: p[lang='en']; //全部使用英文的段落 如<p lang='en'> *[name='tom'] //全部包含name=tom的屬性的元素 //組合使用: div, #log //全部<div>元素,以及id=log的元素 //文檔中的全部的元素, document.all() document.all[0] //文檔中的第一個元素 document.all["navbar"] //id或name未navbar的元素 </script>
parentNode // 父節點 childNodes // 全部子節點 firstChild // 第一個子節點 lastChild // 最後一個子節點 nextSibling // 下一個兄弟節點 previousSibling // 上一個兄弟節點 parentElement // 父節點標籤元素 children // 全部子標籤 firstElementChild // 第一個子標籤元素 lastElementChild // 最後一個子標籤元素 nextElementtSibling // 下一個兄弟標籤元素 previousElementSibling // 上一個兄弟標籤元素
PS:換行也是元素java
innerText //文本 outerText //
outerHTML // innerHTML //HTML內容value // 值
<body> <div id="hehe"> <p>1</p>; <p>2</p> <p>3</p> </div> <script> var tag = document.getElementById('hehe'); console.log(tag.innerText); </script> </body> //代碼執行結果: 1 2 3
<body> <div id="hehe"> <p>1</p>; <p>2</p> <p>3</p> </div> <script> var tag = document.getElementById('hehe'); console.log(tag.innerHTML); </script> </body> //執行結果; <p>1</p> <p>2</p> <p>3</p>
<body> <div id="hehe"> <p>1</p>; <p>2</p> <p>3</p> </div> <script> var tag = document.getElementById('hehe'); console.log(tag.value); </script> </body> //結果: undefined
<body> <div id="hehe"> <p>1</p>; <p>2</p> <p>3</p> </div> <script> var tag = document.getElementById('hehe'); console.log(tag.outerHTML); </script> </body> //結果: <div id="hehe"> <p>1</p>; <p>2</p> <p>3</p> </div>
className //獲取全部類名 classList.add //添加類 classList.remove //刪除類
<body id="body" class="Iambody"> <div class="hehe"> <p>1</p>; <p>2</p> <p>3</p> </div> <div class="haha"> <a>4</a> <a>5</a> </div> <script> var tag = document.getElementById('body'); var a = tag.className; console.log(a); </script> </body> //結果: Iambody
<body id="body" class="Iambody"> <div class="hehe"> <p>1</p>; <p>2</p> <p>3</p> </div> <div class="haha"> <a>4</a> <a>5</a> </div> <script> var tag = document.getElementById('body'); var a = tag.className; tag.classList.add('NewClass'); console.log(tag); </script> </body> //結果: <body id="body" class="Iambody NewClass"> <div class="hehe"> <p>1</p>; <p>2</p> <p>3</p> </div> <div class="haha"> <a>4</a> <a>5</a> </div> <script> var tag = document.getElementById('body'); var a = tag.className; tag.classList.add('NewClass'); console.log(tag); </script> </body>
<body id="body" class="Iambody"> <div class="hehe"> <p>1</p>; <p>2</p> <p>3</p> </div> <div class="haha"> <a>4</a> <a>5</a> </div> <script> var tag = document.getElementById('body'); var a = tag.className; tag.classList.add('NewClass'); tag.classList.remove('Iambody'); console.log(tag); </script> </body> //執行結果: <body id="body" class="NewClass"> <div class="hehe"> <p>1</p>; <p>2</p> <p>3</p> </div> <div class="haha"> <a>4</a> <a>5</a> </div> <script> var tag = document.getElementById('body'); var a = tag.className; tag.classList.add('NewClass'); tag.classList.remove('Iambody'); console.log(tag); </script> </body>
//獲取屬性: getAttribute(屬性名) //設置屬性: setAttribute(屬性名) //移除屬性: removeAttribute(屬性名) //全選,反選,取消的時候用: tb.checked = true || flase; PS: 不要和上述的幾個屬性混搭,不然會出bug;
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <input type="button" value="全選" onclick="CheckAll();"/> <input type="button" value="取消" onclick="Cancel();"/> <input type="button" value="反選" onclick="Reverse();"/> <table border="1px"> <thead> <tr> <th>序號</th> <th>巴拉</th> <th>PIUPIU</th> </tr> </thead> <tbody id="tb"> <tr> <td><input type="checkbox"/></td> <td>22</td> <td>33</td> </tr> <tr> <td><input type="checkbox"/></td> <td>22</td> <td>33</td> </tr> <tr> <td><input type="checkbox"/></td> <td>22</td> <td>33</td> </tr> <tr> <td><input type="checkbox"/></td> <td>22</td> <td>33</td> </tr> <tr> <td><input type="checkbox"/></td> <td>22</td> <td>33</td> </tr> <tr> <td><input type="checkbox"/></td> <td>22</td> <td>33</td> </tr> </tbody> <script> function CheckAll(){ //先找到表格內容 var tb = document.getElementById('tb'); var tr = tb.children; console.log(tr); //然後循環 for(i=0;i<tr.length;i++){ //console.log(tr[i].firstElementChild.firstElementChild); ck = tr[i].firstElementChild.firstElementChild; //ck.setAttribute('checked','checked'); //也能夠使用 ck.checked = true; } } function Cancel(){ //先找到表格內容 var tb = document.getElementById('tb'); var tr = tb.children; console.log(tr); //然後循環 for(i=0;i<tr.length;i++){ //console.log(tr[i].firstElementChild.firstElementChild); ck = tr[i].firstElementChild.firstElementChild; //ck.removeAttribute('checked'); //也能夠使用 ck.checked = false; } } function Reverse(){ //先找到表格內容 var tb = document.getElementById('tb'); var tr = tb.children; console.log(tr); //然後循環 for(i=0;i<tr.length;i++){ //console.log(tr[i].firstElementChild.firstElementChild); ck = tr[i].firstElementChild.firstElementChild; //console.log(ck.checked); if(ck.checked){ ck.checked=false; }else{ ck.checked=true; } //也能夠使用ck.checked = true; } } </script> </table> </body> </html>
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <input type="text" id="i1" value="請輸入關鍵字" onfocus="Focus();" onblur="Blur();" /> <input id="i2" type="text" value="提交"/> <script type="text/javascript"> //捕捉焦點 function Focus(){ var tag = document.getElementById("i1"); if(tag.value == '請輸入關鍵字'){ tag.value = ''; console.log('focus'); } } //失去焦點時的函數操做 function Blur(){ var tag = document.getElementById("i1"); var va = tag.value.trim(); if(va.length == 0){ tag.value = '請輸入關鍵字'; console.log('blur'); } } </script> </body> </html>
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> .item{ position: relative; padding: 30px; } /*.item span{*/ /*position: absolute;*/ /*top: 30px;*/ /*left: 52px;*/ /*opacity: 1;*/ /*}*/ </style> </head> <body> <div class="item"> <a onclick="Favor(this);">贊1</a> </div> <div class="item"> <a onclick="Favor(this);">贊2</a> </div> <div class="item"> <a onclick="Favor(this);">贊3</a> </div> <script> function Favor(ths){ //ths==> 形參this, ==> 誰觸發事件就是誰 console.log(ths); //添加span標籤 var position = 'absolute'; var top = 30; var left = 52; var opacity= 1; var fontSize = 10; var tag = document.createElement('span'); //+1內容 tag.innerText = '+1'; tag.top = top + "px"; tag.left = left + "px"; tag.opacity = opacity; tag.fontSize = fontSize + "px"; tag.position = position; //獲取父標籤,追加tag ths.parentElement.appendChild(tag); //建立定時器 var interval = setInterval(function () { top -= 10; left += 10; opacity -= 0.1; fontSize += 5; //從新賦值 tag.style.top = top + "px"; tag.style.left = left + "px"; tag.style.opacity = opacity; tag.style.fontSize = fontSize + "px"; tag.style.position = position; if(opacity == 0){ //移除定時器 clearInterval(interval); //移除+1標籤 ths.parentElement.removeChild(tag); } },50); } </script> </body> </html>
計時器: setInterval(funcation(){ },50) clearInterval() 定時器: setTimeout() clearTimeout() 建立標籤, 定時器(大小,位置,透明度) 1. this , 特殊的形參--》 觸發事件的標籤 2. createElement 3. appendChild 4. setInterval建立定時器 clearInterval刪除定時器 5. removeChild
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> .hide{ display: none !important; } .shadow{ position: fixed; top:0; bottom: 0; left:0; right: 0; background-color: rgba(0,0,0,.6); z-index:100; } .modal{ background-color: aliceblue; height: 200px; width: 400px; position: fixed; left:50%; top:50%; margin-left: -200px; margin-top: -100px; z-index: 101; } </style> </head> <body> <div style="height: 2000px; background-color: #dddddd; margin: 0"> <input type="button" value="點我呀,點我呀!" onclick="ShowModal();"/> </div> <div id="shadow" class="shadow hide"></div> <div id="modal" class="modal hide"> <!--若是a標籤什麼都不作的話,就是用下面的語法javascript:void(0);來作佔位符,相似於Python中的pass;--> <a href="javascript:void(0);" onclick="HideModal();">取消</a> </div> <script> function ShowModal(){ var t1 = document.getElementById('shadow'); var t2 = document.getElementById('modal'); t1.classList.remove('hide') t2.classList.remove('hide') } function HideModal(){ var t1 = document.getElementById('shadow'); var t2 = document.getElementById('modal'); t1.classList.add('hide') t2.classList.add('hide') } </script> </body> </html>
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> .backtop{ position: fixed; right: 20px; bottom:20px; color:red; } .hide{ display: none; } </style> </head> <!--返回頂部實例--> <body onscroll="BodyScroll();"> <div style="height: 2000px;background-color: #dddddd"></div> <div id="back" class="backtop hide" onclick="BackTop();">返回頂部</div> <script> function BackTop(){ document.body.scrollTop = 0; //直接返回頂部 } function BodyScroll(){ console.log('heihei'); var tag = document.getElementById('back'); var s = document.body.scrollTop; if(s >= 100){ //距離頂部大於100像素的時候顯示, 顯示時只要移除hide樣式便可 tag.classList.remove('hide'); }else{ tag.classList.add('hide'); } } </script> </body> </html>
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <div id="status" style="color:red;"></div> <input type="button" onclick="DeleteEmail();" value="刪除所選郵件"/> <script> function DeleteEmail(){ var tag = document.getElementById('status'); tag.innerText="刪除成功"; setTimeout(function(){ tag.innerText = ''; },5000) } </script> </body> </html>
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <!--檢驗用戶輸入是否合法--> <body> <form action="http://www.baidu.com/"> <input type="text" id="username"> <input type="submit" value="提交" onclick="return SubmitForm();"/> <!--onclick中的return意義在於, 若是執行函數返回值是true的話,繼續執行,若是爲False的話,會中斷執行,再也不日後繼續--> </form> <script> function SubmitForm(){ var user = document.getElementById('username'); if(user.value.length > 0){ //能夠提交 return true; }else{ //輸入爲空,不能提交 alert('用戶輸入用戶名不能爲空!'); return false; } } </script> </body> </html>
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> .hide{ display: none; } .menu{ width: 200px; height: 600px; border: 1px solid #dddddd; overflow: auto; } .menu .item .title{ height: 40px; line-height: 40px; background-color: #2459a2; color: white; } </style> </head> <body> <div class="menu"> <div class="item"> <div class="title" onclick="ShowMenu(this);">菜單一</div> <div class="body"> <p>內容一</p> <p>內容一</p> <p>內容一</p> <p>內容一</p> <p>內容一</p> </div> </div> <div class="item"> <div class="title" onclick="ShowMenu(this);">菜單二</div> <div class="body hide"> <p>內容二</p> <p>內容二</p> <p>內容二</p> <p>內容二</p> <p>內容二</p> <p>內容二</p> </div> </div> <div class="item"> <div class="title" onclick="ShowMenu(this);">菜單三</div> <div class="body hide"> <p>內容三</p> <p>內容三</p> <p>內容三</p> <p>內容三</p> <p>內容三</p> <p>內容三</p> </div> </div> </div> <script src="plugin/jquery-1.12.4.js"></script> <script> function ShowMenu(ths){ //將Dom轉換爲JQuery --> $(ths) //先找到下一個標籤,移除hide $(ths).next().removeClass('hide'); //找到父標籤,再找到父標籤的兄弟標籤,然後找全部父標籤中的子子孫孫中查找body,添加hide $(ths).parent().siblings().find('.body').addClass('hide'); } </script> </body> </html>
建立標籤jquery
// 方式一, 對象方式建立,也是推薦的方式 var tag = document.createElement('a'); tag.innerText = "Tom"; tag.className = "c1"; tag.href = "http://www.cnblogs.com/dbq"; // 方式二 var tag = "<a class='c1' href='http://www.cnblogs.com/dbq'>Tom</a>";
操做標籤編程
<div id ='pa'>piupiupiu</div> <script> var p = document.getElementById('pa'); var obj = "<input type='text' />"; p.insertAdjacentHTML('beforeEnd',obj); p.insertAdjacentElement('afterBegin',document.createElement('p')); </script> //注意:第一個參數只能是'beforeBegin'、 'afterBegin'、 'beforeEnd'、 'afterEnd' //執行結果: <div id="pa"><p></p>piupiupiu<input type="text"></div> //方式二: <div id ='pa'>piupiupiu</div> <script> var p = document.getElementById('pa'); var tag = document.createElement('a'); p.appendChild(tag); p.insertBefore(tag,p[1]); </script> //執行結果 <div id="pa">piupiupiu<a></a></div>
<div id="hehe">hehehe</div> <script> var tag = document.getElementById('hehe'); tag.style.fontSize = '30px'; tag.style.color = 'green'; </script>
總文檔高度 document.documentElement.offsetHeight 當前文檔佔屏幕高度 document.documentElement.clientHeight 自身高度 tag.offsetHeight 距離上級定位高度 tag.offsetTop 父定位標籤 tag.offsetParent 滾動高度 tag.scrollTop /* clientHeight -> 可見區域:height + padding clientTop -> border高度 offsetHeight -> 可見區域:height + padding + border offsetTop -> 上級定位標籤的高度 scrollHeight -> 全文高:height + padding scrollTop -> 滾動高度 特別的: document.documentElement代指文檔根節點 */
<input id='form' type="text" /> <script> document.getElementById('form').submit(); </script>
console.log 輸出框 alert 彈出框 confirm 確認框 // URL和刷新 location.href 獲取URL location.href = "url" 重定向 location.reload() 從新加載 // 定時器 setInterval 屢次定時器 clearInterval 清除屢次定時器 setTimeout 單次定時器 clearTimeout 清除單次定時器
屬性 | 當如下狀況發生時,出現此事件 | FF | N | IE |
---|---|---|---|---|
onabort | 圖像加載被中斷 | 1 | 3 | 4 |
onblur | 元素失去焦點 | 1 | 2 | 3 |
onchange | 用戶改變域的內容 | 1 | 2 | 3 |
onclick | 鼠標點擊某個對象 | 1 | 2 | 3 |
ondblclick | 鼠標雙擊某個對象 | 1 | 4 | 4 |
onerror | 當加載文檔或圖像時發生某個錯誤 | 1 | 3 | 4 |
onfocus | 元素得到焦點 | 1 | 2 | 3 |
onkeydown | 某個鍵盤的鍵被按下 | 1 | 4 | 3 |
onkeypress | 某個鍵盤的鍵被按下或按住 | 1 | 4 | 3 |
onkeyup | 某個鍵盤的鍵被鬆開 | 1 | 4 | 3 |
onload | 某個頁面或圖像被完成加載 | 1 | 2 | 3 |
onmousedown | 某個鼠標按鍵被按下 | 1 | 4 | 4 |
onmousemove | 鼠標被移動 | 1 | 6 | 3 |
onmouseout | 鼠標從某元素移開 | 1 | 4 | 4 |
onmouseover | 鼠標被移到某元素之上 | 1 | 2 | 3 |
onmouseup | 某個鼠標按鍵被鬆開 | 1 | 4 | 4 |
onreset | 重置按鈕被點擊 | 1 | 3 | 4 |
onresize | 窗口或框架被調整尺寸 | 1 | 4 | 4 |
onselect | 文本被選定 | 1 | 2 | 3 |
onsubmit | 提交按鈕被點擊 | 1 | 2 | 3 |
onunload | 用戶退出頁面 | 1 | 2 | 3 |
對於事件須要注意的要點:windows
this標籤當前正在操做的標籤,event封裝了當前事件的內容。數組
實例:瀏覽器
<!DOCTYPE html> <html> <head> <meta charset='utf-8' > <title>擁有時不知珍惜,失去時方覺惋惜。——請珍惜每一滴水。 </title> <script type='text/javascript'> function Go(){ var content = document.title; var firstChar = content.charAt(0) var sub = content.substring(1,content.length) document.title = sub + firstChar; } setInterval('Go()',1000); </script> </head> <body> </body> </html>
onfocus, 獲取焦點, 等於一個函數,就是捕捉 onblur, 離開焦點 onclick, 點擊 1. this, 當前觸發事件的標籤 2. 全局事件綁定, windows.onKeyDown = funcation(); 3. event, 特殊參數,包含了事件的相關的內容 4. 默認事件 好比a標籤默認動做,跳轉 好比submit默認動做,提交 優先級: 自定義優先級比默認優先級高,如:a、submit標籤 checkbox的是默認事件先執行,自定義事件後執行 <input type="submit" value="提交" onclick="return SubmitForm();"/> <!--onclick中的return意義在於, 若是執行函數返回值是true的話,繼續執行,若是爲False的話,會中斷執行,再也不日後繼續-->
PS: 若是a標籤什麼都不作的話,就是用下面的語法javascript:void(0);來作佔位符,相似於Python中的pass; app
jQuery是一個類庫(Python中的叫作模塊),jQuery能幫助咱們在文檔中找到關心的元素,而且對這些元素進行操做:添加內容、編輯HTML屬性和CSS屬性、定義事件處理程序,以及執行動畫。還擁有Ajax工具來動態發起HTTP請求,以及一些通用的工具函數來操做對象和數組。
jQuery蒂尼了一個全局函數:jQuery(),在類庫的使用中,還有一個快捷別名: $ ,這是惟一的兩個變量。
var divs = $("div") //返回0個或多個DOM元素,這就是jQuery對象。
版本:
選擇器
層級選擇器:
CSS
屬性的操做
文本的操做
底層同樣,可是在此基礎上JQuery還作了優化
1. 如何使用JQuery綁定
2. 當文檔加載完畢後,自動執行! ###重要!
$(function(){ ... })
3. 延遲綁定:
$("ul").delegate("l1","click",funcation(){
...
})
現增長,現綁定
PS: 必定要先找到父標籤,ul,至關於選擇器
4. return false; 後面也就不提交了,和Dom裏同樣;
AJAX即「Asynchronous JavaScript and XML」(異步的JavaScript與XML技術),指的是一套綜合了多項技術的瀏覽器端網頁開發技術。Ajax的概念由傑西·詹姆士·賈瑞特所提出
大白話:偷偷發請求
.each()
參考:
http://www.cnblogs.com/wupeiqi/articles/5643298.html