JavaScript之Dom對象

DOM

  • 概念:Docunment Object Model 文檔對象模型。
  • 將標記語言文檔的各個組成部分,封裝爲對象,可以使用這些標記語言文檔進行CRUD的動態操作。

HTML DOM 樹:
在這裏插入圖片描述

(一)、核心:DOM - 針對任何結構化文檔的標準模型

1. Document:文檔對象

1.1 獲取Element對象:

①、getElementById():根據id屬性值來獲取元素對象。i的屬性值一般唯一
②、getElementsByTagName() :根據元素名稱獲取元素對象們。返回值是一個數組
<body>
    <div id="div1">div1</div>
    <div id="div2">div2</div>
    <div id="div3">div3</div>   

    <div class="cls1">div4</div>
    <div class="cls1">div5</div>

    <input type="text" name="username">
    <script>
        var divs = document.getElementsByTagName("div");
        document.write(divs.length);//5
    </script>
</body>
③、getElementsByClassName():根據Class屬性值獲取元素對象們。返回值是一個數組。
<div id="div1">div1</div>
<div id="div2">div2</div>
<div id="div3">div3</div>   
<div class="cls1">div4</div>
<div class="cls1">div5</div>
<input type="text" name="username">
<script>
    var classes = document.getElementsByClassName("cls1");
    document.write(divs.length);//-----> 2
</script>

④、getElementsByName():根據name屬性值獲取元素對象們,返回值是一個數組。

<div class="cls1">div4</div>
<div class="cls1">div5</div>
<input type="text" name="username">
<script>
    var usernames = document.getElementsByName("username");
    document.write(usernames.length);//------> 1
</script>

1.2 創建其他DOM對象:

createAttribute(name) 創建擁有指定名稱的屬性節點,並返回新的 Attr 對象。
createComment() 創建註釋節點。
createElement() 創建元素節點。

var table = document.createElement("table");
alert(table);//----> [object HTMLTableElement]

createTextNode() 創建文本節點。

2. Element:元素對象

  • 獲取 / 創建:通過document來獲取和創建。
removeAttribute() 刪除指定的屬性。
setAttribute() 添加新屬性。

首先創建一個a標籤,但是一開始沒有任何屬性,不能通過點擊跳轉頁面;我們通過一下方法來給a標籤設置屬性。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Element對象</title>
</head>

<body>
    <a>點我試一試</a>
    <input type="button" id="btn_set" value="設置屬性">
    <input type="button" id="btn_remove" value="刪除屬性">
    <script>
        //獲取btn
        var btn_set = document.getElementById("btn_set");
        btn_set.onclick = function () {
            //1.獲取a標籤
            var element_a = document.getElementsByTagName("a")[0];
            //添加屬性
            element_a.setAttribute("href", "https://www.baidu.com");
        }

        //獲取btn
        var btn_remove = document.getElementById("btn_remove");
        btn_remove.onclick = function () {
            //1.獲取a標籤
            var element_a = document.getElementsByTagName("a")[0];
            //刪除屬性
            element_a.removeAttribute("href", "https://www.baidu.com");
        }

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

效果如下:
在這裏插入圖片描述

3. Attribute:屬性對象

4. Text:文本對象

5. Comment:註釋對象

6. Node:節點對象,其他5個的父對象

特點:所有dom對象都可以被認爲是一個節點

方法:

CURD dom樹:
appendChild():向節點的子節點列表的結尾添加新的子節點。
removeChild():刪除(並返回)當前節點的指定子節點。
replaceChild() 用新節點替換一個子節點。

這裏我們通過使用按鈕的方式來刪除子節點。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Node對象</title>
    <style>
        div{
            border: 1px solid red;
        }
        #div1{
            width: 200px;
            height: 200px;
        }
        #div2{
            width: 100px;
            height: 100px;
        }
    </style>
</head>
<body>
    <div id="div1">
        <div id="div2">div2</div>
        div1
    </div> 
    
    <input type="button" id="del" value="刪除子節點">
    
    <script>
        //1.獲取超鏈接
        var element_a = document.getElementById("del");
        //2.綁定單擊事件
        element_a.onclick = function(){
            var div1 = document.getElementById("div1");
            var div2 = document.getElementById("div2");

            div1.removeChild(div2);
        }
    </script>

</body>
</html>

效果如圖:
在這裏插入圖片描述
但是如果將上面的<input type="button" id="del" value="刪除子節點">的這一行代換爲<a href="" id="del">刪除子節點</a>,那麼不會顯示上面的效果,因爲href=" "的屬性一直爲空;指的是隻要一點擊按鈕,就會在本頁面內跳轉【相當於在本頁面內一直進行刷新操作】,因此看不到效果。

超鏈接的功能:
①、可以被點擊。
②、點擊後跳轉到href指定的url。

如果我們想要保留①的功能,去掉②的功能,那麼需要填寫代碼爲href = " javascript: void(0)";

修改後,效果如圖所示:
在這裏插入圖片描述

案例:添加div3。代碼如下

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Node對象</title>
    <style>
        div{
            border: 1px solid red;
        }
        #div1{
            width: 200px;
            height: 200px;
        }
        #div2{
            width: 100px;
            height: 100px;
        }
        #div3{
            width: 100px;
            height: 100px;
        }
    </style>
</head>
<body>
    <div id="div1">
        <div id="div2">div2</div>
        div1
    </div> 

    <a href = " javascript: void(0)" id="del">刪除子節點</a>
    <a href = " javascript: void(0)" id="add">添加子節點</a>

    <script>
        //1.獲取超鏈接
        var element_a = document.getElementById("del");
        //2.綁定單擊事件
        element_a.onclick = function(){
            var div1 = document.getElementById("div1");
            var div2 = document.getElementById("div2");

            div1.removeChild(div2);
        }

        //1.獲取超鏈接
        var element_add = document.getElementById("add");
        //2.綁定單擊事件
        element_add.onclick = function(){
            var div1 = document.getElementById("div1");
            
            //3.給div1添加子節點div3
            var div3 = document.getElementById("div");
            div3.setAttribute("id","div3");

            div1.appendChild(div3);
        }

    </script>

</body>
</html>

效果如圖所示:
在這裏插入圖片描述

屬性:

parentNode:返回節點的父節點。
var div2 = document.getElementById("div2");
var div1 = div2.parentNode;
alert(div1);//----> [object HTMLDivElement]

(二)、HTML DOM - 針對 HTML 文檔的標準模型

1.標籤體的設置和獲取:innerHtml

2.使用htm元素對象的屬性

<body>
    <div id="div1">
        div
    </div>
    
    <script>
        var div = document.getElementById("div1");
        var innerHTML = div.innerHTML;
        
        //div標籤中替換一個文本輸入框
        div.innerHTML = "<input type = 'text' >";
        //div標籤中追加一個文本輸入框
        div.innerHTML += "<input type = 'text' >";
    </script>

</body>

innerHTML 屬性
獲取元素內容最簡單的方法是使用 innerHTML 屬性。
innerHTML 屬性可用於獲取或替換 HTML 元素的內容。

innerHTML 屬性可用於獲取或改變任何 HTML 元素,包括 <html> 和 <body>。

3.控制樣式

3.1 使用元素的style屬性來設置

<script>
    var div1 = document.getElementById("div1");
    div1.onclick = function(){
        //修改樣式方式1
        div1.style.border = "1px solid red";
        div1.style.width = "200px";
        //font-size--->fontSize
        div1.style.fontSize = "20px";
    }
</script>

效果如圖所示:
在這裏插入圖片描述

3.2 提前定義好類選擇器的樣式,通過元素的className屬性來設置其class屬性值。

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>樣式控制</title>
    <style>
        .d1{
            border: 1px solid red;
            width: 100px;
            height: 100px;
        }
        .d2{
            border: 1px solid blue;
            width: 200px;
            height: 200px;
        }
    </style>
</head>
<body>
    <div id="div2">
        div
    </div>

    <script>
        var div2 = document.getElementById("div2");
        div2.onclick = function(){
            div2.className = "d1";
        }
    </script>

</body>
</html>

效果如圖所示:
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章