js:DOM操作(DOM樹、改變元素內容)


一、結點

文檔對象模型(Document Object Model),是W3C組織推薦的處理可擴展標記語言的標准編程接口。js的DOM操作可以改變網頁的內容、結構和樣式,可以利用DOM操作來改變元素里面的內容、屬性等。

1、html的DOM樹

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
    </head>
    <body bgcolor="white">
        <h5 align="middle">文字鏈接和圖片鏈接</h5>
        <center>
            <a href="https://www.baidu.com/" title="百度一下">百度</a><br><br><br><br><br><br>
            <a href="https://www.baidu.com/" title="百度一下"><img src="img/百度圖標.png" /></a>
        </center>
    </body>
</html>

上面的HTML文件可以轉化為如下的DOM樹:

Document: 整個HTML文件稱為一個Document文檔。

Element:標簽稱為Element元素,例如:head、title、body、h5等。

Attribute:標簽里面的屬性,例如:href、title等。

Text:text文本、空格、換行,例如:<h5>之間的文本內容。

Node:Document、Element、Attribute、Text統稱為Node。

 

2、DOM對象的常用方法:

getElementById()    返回帶有指定 ID的元素
getElementsByTagName()    返回包含帶有指定標簽名稱的所有元素的節點列表(集合/節點數組)
getElementsByClassName()    返回包含帶有指定類名的所有元素的節點列表
appendChild()    把新的子節點添加到指定節點
removeChild()    刪除子節點
replaceChild()    替換子節點
insertBefore()    在指定的子節點前面插入新的子節點
createAttribute()    創建屬性節點
createElement()    創建元素節點
createTextNode()    創建文本節點
getAttribute()    返回指定的屬性值
setAttribute()    把指定屬性設置或修改為指定的值

應用舉例:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
        <div id="d1">
        </div>
        <script>
            var para=document.createElement("p");
            var node=document.createTextNode("23日,@電影熊出沒 發布撤檔聲明,
“我們不願看到觀眾朋友們因為觀看《熊出沒·狂野大陸》承擔任何健康風險,更不願看到疫情進一步擴散的可能。
沒有什么比家人和孩子的安全更加重要!我們特此宣布,《熊出沒·狂野大陸》將正式退出春節檔,擇日再映。”
"); para.appendChild(node); var element=document.getElementById("d1"); element.appendChild(para); </script> </body> </html>

首先創建段落元素結點,然后創建文本結點,最后將文本結點放入段落中。

 

3、結點操作(父子節點)

(1)獲取子結點

普通方式:

<body>
        <ul class="fu">
            <li class="zi">1</li>
            <li>2</li>
        </ul>
        <script>
             var myul=document.querySelector(".fu");
             var myli=document.querySelector(".zi"); </script> </body>

需要分別獲取父節點和子節點

通過結點操作獲取(獲取父節點)

    <body>
        <ul class="fu">
            <li class="zi">1</li>
            <li>2</li>
        </ul>
        <script>
             var myli=document.querySelector(".zi");
             console.log(myli.parentElement);
        </script>
    </body>

利用父子關系獲取結點

 

(3)獲取子節點

普通方式:

    <body>
        <ul class="fu">
            <li class="zi">1</li>
            <li>2</li>
        </ul>
        <script>
             var myul=document.querySelector(".fu");
             var lis=myul.querySelectorAll("li");
             console.log(lis);
        </script>
    </body>

結點操作:獲取的是所有的結點

<body>
        <ul class="fu">
            <li class="zi">1</li>
            <li>2</li>
        </ul>
        <script>
             var myul=document.querySelector(".fu");
             console.log(myul.childNodes);
        </script>
    </body>

 可以通過判斷nodetype獲取需要的結點

獲取所有的子元素節點:

    <body>
        <ul class="fu">
            <li class="zi">1</li>
            <li>2</li>
        </ul>
        <script>
             var myul=document.querySelector(".fu");
             console.log(myul.children);
        </script>
    </body>

獲取最后一個和第一個元素結點(IE9以上可使用):

    <body>
        <ul class="fu">
            <li class="zi">1</li>
            <li>2</li>
            <li>3</li>
            <li>4</li>
        </ul>
        <script>
             var myul=document.querySelector(".fu");
             console.log(myul.firstElementChild);
             console.log(myul.lastElementChild)
        </script>
    </body>

 沒有兼容性問題的情況下返回第一個子元素和最后一個子元素:

    <body>
        <ul class="fu">
            <li class="zi">1</li>
            <li>2</li>
            <li>3</li>
            <li>4</li>
        </ul>
        <script>
             var myul=document.querySelector(".fu");
             console.log(myul.children[0]);
             console.log(myul.children[3])
        </script>
    </body>

優化:

    <body>
        <ul class="fu">
            <li class="zi">1</li>
            <li>2</li>
            <li>3</li>
            <li>4</li>
        </ul>
        <script>
             var myul=document.querySelector(".fu");
             console.log(myul.children[0]);
             console.log(myul.children[myul.children.length-1])
        </script>
    </body>

4、結點操作(兄弟結點)

(1)獲取兄弟結點

    <body>
        <div id="1"></div>
        <div id="2"></div>
        <span id="3"></span>
        <script>
             var mydiv=document.getElementById("3")
             console.log(mydiv.nextSibling);
             console.log(mydiv.previousSibling);
        </script>
    </body>

 因為存在換行,所以兄弟結點都為文本結點

 (2)獲取兄弟元素結點

    <body>
        <div id="1"></div>
        <div id="2"></div>
        <span id="3"></span>
        <script>
             var mydiv=document.getElementById("2")
             console.log(mydiv.nextElementSibling);
             console.log(mydiv.previousElementSibling);
        </script>
    </body>

 

 

 

 

二、dom改變結點的內容

1、改變元素內容

(1)element.innerText:從起始位置到終止位置,但它除去html標簽、空格、換行

改變元素內容:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>獲取元素</title>
    </head>

    <body>
        <button>獲取時間</button>
        <div>hello</div>
        <script>
            //獲取元素
            var btn = document.querySelector("button");
            var div = document.querySelector("div");
            //注冊事件
            btn.onclick = function() {
                div.innerText = "2020年7月24日15:58:00";
            }
        </script>
    </body>

</html>

 點擊按鈕:

因為script需要獲取標簽,因此將標簽放到最前方,保證能夠先獲取到標簽

不識別標簽:

    <body>
        <button>獲取時間</button>
        <div>hello</div>
        <script>
            //獲取元素
            var btn = document.querySelector("button");
            var div = document.querySelector("div");
            //注冊事件
            btn.onclick = function() {
                div.innerText = "<strong>2020年7月24日15:58:00<strong>";
            }
        </script>
    </body>

(2)element.innerHTML:起始位置到終止位置的全部內容,包括html標簽、空格和換行

修改元素內容:

    <body>
        <button>獲取時間</button>
        <div>hello</div>
        <script>
            //獲取元素
            var btn = document.querySelector("button");
            var div = document.querySelector("div");
            //注冊事件
            btn.onclick = function() {
                div.innerHTML = "2020年7月24日15:58:00";
            }
        </script>
    </body>

識別元素標簽:

    <body>
        <button>獲取時間</button>
        <div>hello</div>
        <script>
            //獲取元素
            var btn = document.querySelector("button");
            var div = document.querySelector("div");
            //注冊事件
            btn.onclick = function() {
                div.innerHTML = "<strong>2020年7月24日15:58:00<strong>";
            }
        </script>
    </body>

 不識別鏈接:

    <body>
        <button>獲取時間</button>
        <div>hello</div>
        <script>
            //獲取元素
            var btn = document.querySelector("button");
            var div = document.querySelector("div"); //注冊事件 btn.onclick = function() { div.innerHTML = "https://www.cnblogs.com/zhai1997/"; } </script> </body>

 為文本,點擊鏈接不能跳轉

 

2、改變元素的屬性

(1)操作input的屬性

<body>
        <button>請點擊</button>
        <input type="text" value="請輸入"/>
        <script>
            //獲取元素
            var btn = document.querySelector("button");
            var input = document.querySelector("input");
            //注冊事件
            btn.onclick = function() {
                input.value="被點擊了";
                btn.disabled=true;
            }
        </script>
 </body>

點擊前:

 

 點擊后:

 

 (2)src的屬性

<body>
        <button id="button1">1</button>
        <button id="button2">2</button>
        <img src="img/1.jpeg" />
        <script>
            //獲取元素
            var btn1 = document.getElementById("button1");
            var btn2= document.getElementById("button2");
            var img=document.querySelector("img");
            //注冊事件
            btn1.onclick = function() {
                img.src="img/hua.png"
            }
            btn2.onclick=function(){
                img.src="img/1.jpeg";
            }
        </script>
    </body>

點擊按鈕1:

 

 點擊按鈕2:

 

 (3)密碼明文

<body>
        <button id="button">1</button>
        <input type="password" id="pwd"/>
        <script>
            var button =document.getElementById("button");
            var pwd=document.getElementById("pwd");
            var flag=0;
            button.onclick=function(){
                if(flag==0){
                    pwd.type="text";
                }else{
                    pwd.type="password";
                }
            }
        </script>
    </body>

未點擊按鈕:

 

 點擊按鈕:

 

 

3、改變樣式

(1)普通方式

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <style>
            div{
                width: 200px;
                height: 200px;
                background-color: black;
            }
        </style>
    </head>
    <body>
        <div></div>
        <script>
            var div=document.querySelector("div");
            div.onclick=function(){
                this.style.backgroundColor="red";
            }
        </script>
    </body>
</html>

點擊按鈕前:

 

 點擊后:

(2)className方式

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <style>
            .change{
                width: 200px;
                height: 200px;
                background-color: black;
            }
        </style>
    </head>
    <body>
        <div>hello</div>
        <script>
            var div=document.querySelector("div");
            div.onclick=function(){
                this.className="change";
            }
        </script>
    </body>
</html>

點擊前:

 

 點擊后:加載相應的樣式

 

 此種方式會覆蓋原有的樣式,如果要保留原有的樣式,可以將原有的樣式寫在前面,修改后的樣式寫在后面

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM