文檔對象模型(Document Object Model,DOM)是一種用於HTML和XML文檔的編程接口。它給文檔提供了一種結構化的表示方法,能夠改變文檔的內容和呈現方式。咱們最爲關心的是,DOM把網頁和腳本以及其餘的編程語言聯繫了起來。DOM屬於瀏覽器,而不是JavaScript語言規範裏的規定的核心內容。javascript
一、直接查找css
document.getElementById 根據ID獲取一個標籤 document.getElementsByName 根據name屬性獲取標籤集合 document.getElementsByClassName 根據class屬性獲取標籤集合 document.getElementsByTagName 根據標籤名獲取標籤集合
二、間接查找html
parentNode // 父節點 childNodes // 全部子節點 firstChild // 第一個子節點 lastChild // 最後一個子節點 nextSibling // 下一個兄弟節點 previousSibling // 上一個兄弟節點 parentElement // 父節點標籤元素 children // 全部子標籤 firstElementChild // 第一個子標籤元素 lastElementChild // 最後一個子標籤元素 nextElementtSibling // 下一個兄弟標籤元素 previousElementSibling // 上一個兄弟標籤元素
節點與標籤的區別: 節點會把標籤中文本也找出來!java
一、內容node
innerText 文本 outerText innerHTML HTML內容 outerHTML value 值 => 文本框,下來框 表單標籤的值 獲取 與 賦值:(其餘同理) text = obj.innerText => 獲取包含的文本 obj.innerText = '123'
二、屬性編程
attributes // 獲取全部標籤屬性 => 字典形式 setAttribute(key,value) // 設置標籤屬性 getAttribute(key) // 獲取指定標籤屬性 => 沒有的爲null /* var atr = document.createAttribute("class"); atr.nodeValue="democlass"; document.getElementById('n1').setAttributeNode(atr); */
三、class操做瀏覽器
className // 獲取全部類名 => 字符串形式 classList.remove(cls) // 刪除指定類 => 列表形式 classList.add(cls) // 添加類
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <style> ul{ list-style: none; padding: 0; margin: 0; } .title{ background: #DDDDDD; } .clearfix:after{ display: block; content: 'x'; height: 0; visibility: hidden; clear: both; } ul li{ background: blue; color: white; float: left; padding: 8px 10px; } .content{ border: 1px solid #DDDDDD; min-height: 200px; } .active{ background-color: white; color: #000000; } .dis-con{ display: none; } </style> </head> <body> <div class="tab-menu"> <div class="title clearfix"> <ul> <li class="active" target='d1' onclick="Show(this)">價格趨勢</li> <li target='d2' onclick="Show(this)">市場分佈</li> <li target='d3' onclick="Show(this)">其餘</li> </ul> </div> <div class="content" id='content'> <div con='d1'>content1</div> <div class="dis-con" con='d2'>content2</div> <div class="dis-con" con='d3'>content3</div> </div> </div> <script type="text/javascript"> function Show(obj){ var target = obj.getAttribute('target'); var menu = obj.parentElement.children; for(var i=0;i<menu.length;i++){ if(menu[i] == obj){ obj.className='active'; }else{ menu[i].removeAttribute('class'); } } //操做內容 var con_node = document.getElementById('content'); con = con_node.children; for(var j=0;j<con.length;j++){ var attr = con[j].getAttribute('con'); if(attr == target){ con[j].classList.remove('dis-con'); }else{ con[j].classList.add('dis-con'); } } } </script> </body> </html>
四、標籤操做app
a.建立標籤編程語言
// 方式一 var tag = document.createElement('a') tag.innerText = "alex" tag.className = "c1" tag.href = "http://www.cnblogs.com/5poi" // 方式二 var tag = "<a class='c1' href='http://www.cnblogs.com/5poi'>5poi</a>"
b.操做標籤ide
// 方式一 var obj = "<input type='text' />"; xxx.insertAdjacentHTML("beforeEnd",obj); xxx.insertAdjacentElement('afterBegin',document.createElement('p')) //注意:第一個參數只能是'beforeBegin'、 'afterBegin'、 'beforeEnd'、 'afterEnd' 外部上邊 內部頂部 內部最後 外部下邊 // 方式二 var tag = document.createElement('a') xxx.appendChild(tag) # 追加 xxx.insertBefore(tag,xxx[1]) # 指定在xxx[1]前面插入 //移動 obj.appendChild(div) //克隆 obj.cloneNode(true) true => 表示克隆裏面所有東西 默認:false只克隆標籤
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> </head> <body> <p> test 1:</p> <div> <input type="text" /> <input type="button" value="提交" onclick="Common(this)"/> </div> <div> <ul id="commonlist"> <li>alex</li> <li>eric</li> </ul> </div> <p>test 2:</p> <div> <input type="text" /> <input type="button" value="提交" onclick="Common2(this)"/> </div> <div> <ul id="commonlist2"> <li>alex</li> <li>eric</li> </ul> </div> <script type="text/javascript"> function Common(obj){ var val = obj.previousElementSibling.value; obj.previousElementSibling.value ='' ; var commonlist = document.getElementById('commonlist'); //形式一 var str = '<li>'+val+'</li>'; commonlist.insertAdjacentHTML('beforeEnd',str); } function Common2(obj){ var val = obj.previousElementSibling.value; obj.previousElementSibling.value ='' ; var commonlist = document.getElementById('commonlist2'); //形式二 tag = document.createElement('li'); tag.innerText = val; // commonlist.appendChild(tag); // commonlist.insertBefore(tag,commonlist.children[1]); var temp = document.createElement('a'); temp.innerText = '百度'; temp.href = 'http://www.baidu.com'; tag.appendChild(temp); commonlist.appendChild(tag); } </script> </body> </html>
五、樣式操做
var obj = document.getElementById('i1') obj.style.fontSize = "32px"; obj.style.backgroundColor = "red"; #注意轉換: background-color => backgroundColor
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <style> .input-black{ color: black; } .input-gray{ color: gray; } </style> </head> <body> <input type="text" placeholder="請輸入內容" /> <p>test 1:</p> <input type="text" class="input-gray" value="請輸入內容" onfocus="In(this)" onblur="Out(this)"/> <script type="text/javascript"> function In(obj){ obj.className = 'input-black'; var current = obj.value; if(current == '請輸入內容'){ obj.value = ''; } } function Out(obj){ var current = obj.value; if(current == '請輸入內容' || current.trim().length == 0){ obj.value = '請輸入內容'; obj.className = 'input-gray'; } } </script> </body> </html>
六、位置操做
特指整個窗口 document.documentElement 總文檔高度(文檔流) document.documentElement.offsetHeight 當前文檔佔屏幕高度(視口高度) document.documentElement.clientHeight 可見範圍高度: (自身height+border+padding) tag.offsetHeight 當前標籤距離文檔''頂部''高度(距離上級定位高度) #若是當前標籤,的父標籤有position 的話 就是距離position高度 tag.offsetTop 父定位標籤 tag.offsetParent 滾動條距離頂部高度 (滾動高度) tag.scrollTop /* clientHeight -> 可見區域:height + padding clientTop -> border高度 offsetHeight -> 可見區域:height + padding + border offsetTop -> 上級定位標籤的高度 scrollHeight -> 全文高:height + padding scrollTop -> 滾動高度 特別的: document.documentElement代指文檔根節點 */
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <style type="text/css"> .content{ height: 2000px; } .top{ width: 40px; height: 40px; background-color: burlywood; position: fixed; right: 20px; bottom: 10px; } .hide{ display: none; } </style> </head> <body onscroll="f1()"> <div class="content"></div> <div class="top" onclick="Gotop()" id='top'> <a href="javascript:void(0)">返回頂部</a> </div> <script type="text/javascript"> function Gotop(){ document.body.scrollTop = 0 ; } function f1(){ var top = document.body.scrollTop; var go_top = document.getElementById('top'); if(top > 100){ go_top.classList.remove('hide'); }else{ go_top.classList.add('hide'); } } </script> </body> </html>
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <style> body{ margin: 0; background-color: gray; } .pg-head{ background: #000000; height: 48px; } .menu{ position: absolute; width: 180px; left: 200px; background-color: white; float: left; } .content{ position: absolute; width: 180px; left: 385px; background-color: white; float: left; } .item{ background-color: white; width: 800px; height: 900px; } .pg-body .fixed{ position: fixed; top:10px; } .pg-body .menu .active{ background-color: #426ebe; color: white; } </style> </head> <body onscroll="Hua();"> <div class="pg-head"></div> <div class="pg-body"> <div id='menu' class="menu"> <ul> <li>第一章</li> <li>第二章</li> <li>第三章</li> </ul> </div> <div id='content' class="content"> <div class="item">牀前明月光</div> <div class="item">疑是地上霜</div> <div class="item" style="height: 100px;">舉頭望明月</div> </div> </div> <script type="text/javascript"> function Hua(){ var a = document.body.offsetHeight; var b = document.getElementById('content').offsetHeight; var c = document.documentElement.clientHeight; // console.log(document.body.scrollTop , document.body.clientHeight , document.body.scrollHeight ); var huagao = document.body.scrollTop; var menu = document.getElementById('menu'); if (huagao > 48 ){ menu.classList.add('fixed'); }else{ menu.classList.remove('fixed'); } var items = document.getElementById('content').children; for(var i=0;i<items.length;i++){ var currentItem = items[i]; // console.log(currentItem.offsetTop); // console.log(currentItem.offsetTop , currentItem.offsetParent.offsetTop); var currentItemBodyTop = currentItem.offsetTop + currentItem.offsetParent.offsetTop // console.log(currentItemTop , huagao); var currentItemWindowTop = currentItemBodyTop - huagao ; var currentHeight = items[i].offsetHeight; // console.log(currentItemWindowTop); if(currentItemWindowTop < 0 && huagao < (currentHeight + currentItemBodyTop)){ menu.getElementsByTagName('li')[i].classList.add('active'); var li = menu.getElementsByTagName('li'); for(var j=0;j<li.length;j++){ if(li[j] != menu.getElementsByTagName('li')[i]){ li[j].classList.remove('active'); } } break; } } //當最後一部分高度不夠時! if( (a+b) == (huagao+c) ){ var mu = document.getElementById('menu').children[0].lastElementChild; var ac = document.getElementById('menu').children[0].getElementsByClassName('active')[0]; ac.classList.remove('active'); mu.classList.add('active'); } } </script> </body> </html>
七、提交表單
document.geElementById('form').submit()
八、其餘操做
console.log 輸出框 alert 彈出框 confirm 確認框 // URL和刷新 location.href 獲取URL location.href = "url" 重定向 location.reload() 從新加載 // 定時器 setInterval 屢次定時器 clearInterval 清除屢次定時器 setTimeout 單次定時器 clearTimeout 清除單次定時器 setInterval(function (){...} , 1000 ) 每1秒執行一次這個函數
對於事件須要注意的要點:
this
event
事件鏈以及跳出
1.註冊事件: a. <div onxxxx=''> b.document....on.... =function() 2.this 代指當前正在操做的標籤 3.event 觸發當前標籤的事件內容 onkeydown='down(this,event)' console.log(e.KeyCode) 4. 自定義事件>默認事件 (優先級) 若是想要阻止後面事件發生, 須要 return false; <a href='#' onclick = 'return Func();' ></a> 若是Func返回false 後面事件再也不執行!!!!
實例:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <style> .logo{ background-color:red ; height: 60px; color:white; font-size: 60px; text-align: center; } </style> </head> <body> <div id="logo" class='logo'>歡迎蒞臨指導</div> <script type="text/javascript"> setInterval(function f1(){ var logo = document.getElementById('logo').innerText; var first_str = logo[0]; var sub_str = logo.slice(1,logo.length); var new_str = sub_str + first_str; document.getElementById('logo').innerText = new_str; },800) </script> </body> </html>
demo 1:class操做
demo 2:標籤操做(多層標籤嵌套)
demo 3:樣式操做
demo 4:返回頂部按鈕
demo 5:滾動菜單
demo 6:事件-跑馬燈
1.摺疊菜單:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <style> ul{ padding: 0; margin: 0; } .father{ width: 200px; height: 500px; background-color: gray; } .hidetitle{ display:none; } .title{ background-color: red; cursor: pointer; } .context{ background-color: aquamarine; } </style> </head> <body> <div class="father"> <div class="item"> <div class="title" onclick="Show(this)">菜單一</div> <div class="context"> <ul> <li>123</li> <li>123</li> <li>123</li> </ul> </div> </div> <div class="item"> <div class="title" onclick="Show(this)">菜單二</div> <div class="context hidetitle"> <ul> <li>123</li> <li>123</li> <li>123</li> </ul> </div> </div> <div class="item"> <div class="title" onclick="Show(this)">菜單三</div> <div class="context hidetitle"> <ul> <li>123</li> <li>123</li> <li>123</li> </ul> </div> </div> <div class="item"> <div class="title" onclick="Show(this)">菜單四</div> <div class="context hidetitle"> <ul> <li>123</li> <li>123</li> <li>123</li> </ul> </div> </div> </div> <script type="text/javascript"> function Show(obj){ var pre_node = obj.parentElement; obj.nextElementSibling.classList.remove('hidetitle'); var father = obj.parentElement.parentElement; var all_son = father.children; for(var i=0;i<all_son.length;i++){ if (all_son[i] != pre_node){ all_son[i].children[1].classList.add('hidetitle'); } } } </script> </body> </html>