1. 程式人生 > 其它 >全新java大資料教程之JavaScript的DOM物件(Document Object Model 文件物件模型)

全新java大資料教程之JavaScript的DOM物件(Document Object Model 文件物件模型)

一、DOM簡介

DOM:Document Object Model 文件物件模型

要實現頁面的動態互動效果,bom 操作遠遠不夠,需要操作 html 才是核心。如何操作 htm,就是 DOM。簡單的說,dom 提供了用程式動態控制 html 介面。DOM即文件物件模型描繪了一個層次化的節點樹,執行開發人員新增、移除和修改頁面的某一部分。dom 處於javascript 的核心地位上。

每個載入瀏覽器的 HTML 文件都會成為 Document 物件。Document 物件使我們可以從指令碼中對 HTML 頁面中的所有元素進行訪問。Document 物件是 Window 物件的一部分,可通過 window.document 屬性對其進行訪問。

二、節點

載入 HTML 頁面時,Web 瀏覽器生成一個樹型結構,用來表示頁面內部結構。DOM 將這種樹型結構理解為由節點組成,組成一個節點樹。對於頁面中的元素,可以解析成以下幾種型別的節點:

html --> 文件節點

div --> 元素節點

title --> 屬性節點

測試 Div --> 文字節點

<html>
    <head>
        <title>樹!樹!到處都是樹!</title>
    </head>
    <body>
      <div title="屬性節點">測試 Div</div>
    </body>
</html>

三、操作元素的節點

當HTML文件在被解析為一顆DOM樹以後,裡面的每一個節點都可以看做是一個一個的物件,我們稱為DOM物件,對於這些物件,我們可以進行各式各樣的操作,查詢到某一個或者一類節點物件,可以建立某種節點物件,可以在某個位置新增節點物件,甚至可以動態地刪除節點物件,這些操作可以使我們的頁面看起來有動態的效果,後期結合事件使用,就能讓我們的頁面在特定時機、特定的事件下執行特定的變換。

1、獲取節點

在進行增、刪、改的操作時,都需要指定到一個位置,或者找到一個目標,此時我們就可以通過Document物件提供的方法,查詢、定位某個物件(也就是我們說的節點)。

注意:操作 dom 必須等節點初始化完畢後,才能執行。

處理方式兩種:

(1)把 script 呼叫標籤移到html末尾即可;

(2)使用onload事件來處理JS,等待html 載入完畢再載入 onload 事件裡的 JS。

window.onload = function () { //預載入 html 後執行};

獲取方式如下:

<body>
    <p id="p1" class="para">這是一個段落<span>文字</span></p>
    <p id="p1" class="para">這又是一個段落</p>
    <input type="text" name="txt" />
    <input type="checkbox" name="hobby" value="游泳" />游泳
    <input type="checkbox" name="hobby" value="籃球" />籃球
    <input type="checkbox" name="hobby" value="足球" />足球
    <hr />
    <a href="javascript:void(0)" onclick="testById()">按照id獲取</a>
    <a href="javascript:void(0)" onclick="testByName()">按照name獲取</a>
    <a href="javascript:void(0)" onclick="testByTagName()">按照標籤名獲取</a>
    <a href="javascript:void(0);" onclick="testByClass();">按照class獲取</a>
</body>

說明:href="javascript:void(0)":偽協議,表示不執行跳轉,而執行指定的點選事件。本文是Java大資料教程中JavaScript課程DOM部分的教學文件,如需全套視訊課程和資料請評論留言或私聊。

<script type="text/javascript">
    // 按照id獲取元素
    function testById() {
        // 返回單個物件
        var p = document.getElementById("p1");
        console.log(p);
        // 表示獲取元素開始標籤和結束標籤之間的html結構
        console.log(p.innerHTML);             
        console.log(p.innerText); // 表示獲取標籤之間的普通文字
    }

    // 按照name獲取元素
    function testByName() {
        // 物件陣列
        var ho = document.getElementsByName("hobby");
        console.log(ho);
        for(var i = 0; i <= ho.length - 1; i++) {
            console.log(ho[i].value);
        }
    }

    // 按照標籤名獲取元素
    function testByTagName() {
        // 物件陣列
        var inputArr = document.getElementsByTagName("input");
        for(var i = 0; i < inputArr.length; i++) {
            if(inputArr[i].type == "text") {
                console.log("text型別");
            } else if(inputArr[i].type == "checkbox") {
                if(inputArr[i].checked) {
                    console.log(inputArr[i].value);
                }
            }
        }
    }

    // 按照class屬性獲取元素
    function testByClass() {
        // 物件陣列
        var ps = document.getElementsByClassName("para");
        console.log(ps[0].innerHTML);
        ps[0].innerHTML += "這是一段新的文字";
    }
</script>

四、建立節點和插入節點

很多時候我們想要在某個位置插入一個新的節點,此時我們首先需要有一個節點存在,可以通過以下幾種方式建立新節點。

1、建立節點

2、插入節點

<button onclick="add()">新增段落</button>
<div id="container"></div>
        
<script type="text/javascript">
    function add(){
        var container = document.getElementById('container')
        var paragraph = document.createElement('p');
        var txt = document.createTextNode('hello')
        paragraph.appendChild(txt)
        container.appendChild(paragraph)
}
</script>

新增 "段落、圖片、文字框、選項"

<body>
    <button onclick="addPara();">新增段落</button>
    <button onclick="addImg();">新增圖片</button>
    <button onclick="addTxt();">新增文字框</button>
    <button onclick="addOptions()">新增選項</button> 
    <select name="music">
        <option value="-1">你心內的一首歌</option>
        <option value="0">南山南</option>
        <option value="1">喜歡你</option>
    </select>
    <hr />
    <div id = "container"></div>
</body>

<script type="text/javascript">    
    // 新增p節點
    function addPara(){
        // 獲取容器
        var container =document.getElementById("container");
        // 建立段落<p></p>
        var p =document.createElement('p');      
        // 第一種方式
        // 建立文字節點
        var txt=document.createTextNode("以後的你會感謝現在努力的你");
        // 將txt節點追加到p節點中
        p.appendChild(txt);
        // 將p節點追加到container節點中
        container.appendChild(p);        
        /*
        // 第二種方式
        // 向p節點中新增內容
        p.innerHTML = "以後的你會感謝現在努力的你";
        // 將p節點追加到container節點中
        container.appendChild(p);
        */    
        /*
        // 第三種方式
        // 將字串型別的p標籤內容新增到container中,不會新增多次
        var str = "<p>以後的你會感謝現在努力的你</p>";
        container.innerHTML = str;
        */
    }    
    
    // 新增圖片
    function addImg(){
        // 建立圖片
        var img = document.createElement("img") ;            
        /*
        // 設定屬性第一種方式
        // 設定img標籤的src屬性
        // img.src ="http://www.baidu.com/img/bd_logo1.png";
        */        
        // 設定屬性第二種方式
        // setAttribute() 方法新增指定的屬性,併為其賦指定的值。
        // 設定img的src屬性
        img.setAttribute('src','http://www.baidu.com/img/bd_logo1.png');
        img.style.width = '300px';        
        img.style.height = '200px';            
        // 獲取容器
        var container =document.getElementById("container");
        // 將img節點追加到container中。
        container.appendChild(img);
    }    
    
    // 新增文字框
    function addTxt(){
        // 建立文字框
        var txt =document.createElement("input");    
        /*
        // 設定型別第一種方式
        txt.type = "text"; 
        txt.value = "新增成功";
        */
        // 設定型別第二種方式
        txt.setAttribute('type', 'text');
        txt.setAttribute('value', '新增成功');
        /*
         * txt.type = 'password'
         * txt.value = '123'
         */
        // 獲取容器
        var container =document.getElementById("container");
        // 將txt節點追加到container中。
        container.appendChild(txt);
    }
    
    // 新增下拉框的選項            
    function addOptions(){
        // 第一種方式
        /*
        // 建立下拉項
        var option = document.createElement("option") ;
        option.value = "2" ;
        option.text = "油菜花" ;
        // 獲取下拉框
        var sel = document.getElementsByTagName("select")[0];
        // 新增 下拉項 
        sel.appendChild(option);
        */                    
        // 第二種方式:
        var option = document.createElement("option") ;
        option.value = "2" ;
        option.text = "不該" ;
        // 獲取下拉框
        var sel = document.getElementsByTagName("select")[0];
        // 新增下拉項
        sel.options.add(option);        
        // 第三種方式: 新增下拉項
        var sel = document.getElementsByTagName("select")[0];
        sel.innerHTML += "<option value = '2'>英雄</option>" ;
    }            
</script>
如需全套java大資料架構教程和配套課件程式碼等資料請+V:xiaole888899999

3、間接查詢節點

4、刪除節點

removeChild():從元素中移除子節點

<script type="text/javascript">
    function delNode(){
        var programmer =document.getElementById("programmer");
        // 從父元素中刪除節點,獲取要刪除物件的父元素,然後從父元素中刪除該物件
        programmer.parentNode.removeChild(programmer);
    }
</script>
<body>
    <span id="programmer">程式猿</span>
    <a href="javascript:void(0)" onclick="delNode();">刪除</a>
</body>