1. 程式人生 > >Javascript的DOM總結

Javascript的DOM總結

默認 leave copy 之前 簽名 src 獲得 eva 聯動

Javascript的DOM總結

DOM

DOM 是 W3C(萬維網聯盟)的標準。DOM 定義了訪問 HTML 和 XML 文檔的標準:

"W3C 文檔對象模型(DOM)是中立於平臺和語言的接口,它允許程序和腳本動態地訪問和更新文檔的內容、結構和樣式。"

W3C DOM 標準被分為 3 個不同的部分:

核心 DOM - 針對任何結構化文檔的標準模型
XML DOM - 針對 XML 文檔的標準模型
HTML DOM - 針對 HTML 文檔的標準模型

  

DOM節點

根據 W3C 的 HTML DOM 標準,HTML 文檔中的所有內容都是節點(NODE):

整個文檔是一個文檔節點(document對象)
每個 HTML 元素是元素節點(element 對象)
HTML 元素內的文本是文本節點(text對象)
每個 HTML 屬性是屬性節點(attribute對象)
註釋是註釋節點(comment對象)

  

技術分享圖片

DOM查詢

獲取元素節點
getElementById()  通過id獲取一個元素節點
getElementsByTagName()  通過標簽名獲取一組元素節點對象
getElementsByClassName() 通過類名獲取一組元素節點對象
getElementsByName()    通過name屬性獲取一組元素節點對象

註意:getElementsByTagName()會返回一個數組對象,所有查詢到的元素都會被封裝到對象中,即使查詢到的元素只有一個,返回的也是數組。
後面的幾個方法也是。

  

節點樹中的節點彼此擁有層級關系。
父(parent),子(child)和同胞(sibling)等術語用於描述這些關系。父節點擁有子節點。同級的子節點被稱為同胞(兄弟或姐妹)。

在節點樹中,頂端節點被稱為根(root)
每個節點都有父節點、除了根(它沒有父節點)
一個節點可擁有任意數量的子
同胞是擁有相同父節點的節點
下面的圖片展示了節點樹的一部分,以及節點之間的關系:

  技術分享圖片

節點(自身)屬性:
attributes - 節點(元素)的屬性節點
nodeType – 節點類型
nodeValue – 節點值
nodeName – 節點名稱
innerHTML - 節點(元素)的內容
innerText -節點(元素)的文本值


導航屬性:
parentNode - 節點(元素)的父節點 (推薦)
firstChild – 節點下第一個子元素
lastChild – 節點下最後一個子元素
childNodes - 節點(元素)的子節點 


推薦導航屬性:
parentElement              // 父節點標簽元素
children                        // 所有子標簽
firstElementChild          // 第一個子標簽元素
lastElementChild           // 最後一個子標簽元素
nextElementtSibling       // 下一個兄弟標簽元素
previousElementSibling  // 上一個兄弟標簽元素

  

局部查找:

<div id="div1">

    <div class="div2">i am div2</div>
    <div name="yuan">i am div2</div>
    <div id="div3">i am div2</div>
    <p>hello p</p>
</div>

<script>

   var div1=document.getElementById("div1");

////支持;
//   var ele= div1.getElementsByTagName("p");
//   alert(ele.length);
////支持
//   var ele2=div1.getElementsByClassName("div2");
//   alert(ele2.length);
////不支持
//   var ele3=div1.getElementById("div3");
//   alert(ele3.length);
////不支持
//   var ele4=div1.getElementsByName("yuan");
//   alert(ele4.length)

</script>

  

HTML DOM Event(事件)

HTML 4.0 的新特性之一是有能力使 HTML 事件觸發瀏覽器中的動作(action),比如當用戶點擊某個 HTML 元素時啟動一段 JavaScript。下面是一個屬性列表,這些屬性可插入 HTML 標簽來定義事件動作。


onclick        當用戶點擊某個對象時調用的事件句柄。
ondblclick     當用戶雙擊某個對象時調用的事件句柄。

onfocus        元素獲得焦點。               //練習:輸入框
onblur         元素失去焦點。               應用場景:用於表單驗證,用戶離開某個輸入框時,代表已經輸入完了,我們可以對它進行驗證.
onchange       域的內容被改變。             應用場景:通常用於表單元素,當元素內容被改變時觸發.(三級聯動)

onkeydown      某個鍵盤按鍵被按下。          應用場景: 當用戶在最後一個輸入框按下回車按鍵時,表單提交.
onkeypress     某個鍵盤按鍵被按下並松開。
onkeyup        某個鍵盤按鍵被松開。
onload         一張頁面或一幅圖像完成加載。
onmousedown    鼠標按鈕被按下。
onmousemove    鼠標被移動。
onmouseout     鼠標從某元素移開。
onmouseover    鼠標移到某元素之上。
onmouseleave   鼠標從元素離開

onselect      文本被選中。
onsubmit      確認按鈕被點擊。

  

綁定事件的三種方式:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<!--<meta http-equiv="X-UA-Compatible" content="IE=edge">-->
		<meta name="viewport" content="width=device-width, initial-scale=1">
		<title></title>
		
		
	</head>
	<body>
		<!--//方式一-->
    <div onclick="alert(123)">點我呀</div> 
	<div id="abc">點我呀</div>
	<div onclick="fun1();" id="a">點我呀</div>

<script>
//	方式二
    var ele=document.getElementById("abc");
    ele.onclick=function(){
        alert("hi");
    };
//  方式三
	function fun1() {
              var ele=document.getElementById("a");
               ele.onclick=function(){
                alert(123)
            };
          }

</script>
	</body>
</html>

  

onload:

onload 屬性開發中 只給 body元素加.
這個屬性的觸發 標誌著 頁面內容被加載完成.
應用場景: 當有些事情我們希望頁面加載完立刻執行,那麽可以使用該事件屬性.

技術分享圖片
 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>Title</title>
 6 
 7     <script>
 8 //          window.onload=function(){
 9 //               var ele=document.getElementById("ppp");
10 //               ele.onclick=function(){
11 //                alert(123)
12 //            };
13 //          };
14 
15 
16 
17           function fun1() {
18               var ele=document.getElementById("ppp");
19                ele.onclick=function(){
20                 alert(123)
21             };
22           }
23 
24     </script>
25 </head>
26 <body onload="fun1()">
27 
28 <p id="ppp">hello p</p>
29 
30 </body>
31 </html>
View Code

onsubmit:

是當表單在提交時觸發. 該屬性也只能給form元素使用.應用場景: 在表單提交前驗證用戶輸入是否正確.如果驗證失敗.在該方法中我們應該阻止表單的提交.

技術分享圖片
<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();

    }
View Code

DOM增刪改查演示

增:

1 2 createElement(name)創建元素 appendChild();將元素添加

:

1 2 3 獲得要刪除的元素 獲得它的父元素 使用removeChild()方法刪除

:

第一種方式:

使用上面增和刪結合完成修改

第二種方式:

使用setAttribute();方法修改屬性

使用innerHTML屬性修改元素的內容

: 使用之前介紹的方法.

技術分享圖片
<script type="text/javascript">
//在第一個div中動態增加一個a標簽. 該a標簽點擊之後跳轉到百度首頁.
    function addNode(){
        //1.獲得 第一個div
        var div = document.getElementById("div_1");
        //2.創建a標簽  createElement==>創建一個a標簽   <a></a>
        var eleA =  document.createElement("a");
        //3.為a標簽添加屬性 <a href="http://www.baidu.com"></a>
        eleA.setAttribute("href", "http://www.baidu.com");
        //4.為a標簽添加內容 <a href="http://www.baidu.com">百度</a>
        eleA.innerHTML = "百度";    
        //5.將a標簽添加到div中
        div.appendChild(eleA);
    }
    //點擊後 刪除div區域2
    function deleteNode(){
        //1 獲得要刪除的div區域
            var div = document.getElementById("div_2");
        //2.獲得父親
            var parent = div.parentNode;
        //3 由父親操刀 
            parent.removeChild(div);
    }
    //點擊後 替換div區域3 為一個美女
    function updateNode(){
        //1 獲得要替換的div區域3
        var div = document.getElementById("div_3");
        //2創建img標簽對象 <img />
        var img = document.createElement("img");
        //3添加屬性 <img src="001.jpg" />
        img.setAttribute("src", "001.JPG");
        //4.獲得父節點
        var parent = div.parentNode;
        //5.替換
        parent.replaceChild(img, div);
    }
    //點擊後 將div區域4 克隆一份 添加到頁面底部
    
    function copyNode(){
        //1.獲取要克隆的div
        var div = document.getElementById("div_4");
        //2.克隆 參數為true 那麽克隆時克隆所有子元素. false 只克隆自己
        var div_copy = div.cloneNode(true);
        //3.獲得父親
        var parent = div.parentNode;
        //4.添加
        parent.appendChild(div_copy);
    }
    
    
</script>
View Code

修改HTML DOM

  • 改變 HTML 內容

改變元素內容的最簡答的方法是使用 innerHTML ,innerText。

  • 改變 CSS 樣式
1 2 <p id="p2">Hello world!</p> document.getElementById("p2").style.color="blue";<br> .style.fontSize=48px
  • 改變 HTML 屬性

elementNode.setAttribute(name,value)

elementNode.getAttribute(name)<-------------->elementNode.value(DHTML)

  • 創建新的 HTML 元素

createElement(name)

  • 刪除已有的 HTML 元素

elementNode.removeChild(node)

  • 關於class的操作

elementNode.className

elementNode.classList.add

elementNode.classList.remove

Javascript的DOM總結