web7(dom)

dom文檔對象模型

  1. 元素的獲取
  2. 元素的遍歷
  3. 元素的操作(創建、添加、替換、克隆、移除)
  4. 元素的屬性操作
  5. 元素的事件操作
  6. 雜項
  7. 前端動畫(頁面交互)

1.元素的獲取

getElementById 通過元素的id來獲取元素。 只能由document發起
getElementsByTagName 通過元素的名稱來獲得元素(得到的值是元素的集合) 可以由文檔或元素髮起
getElementsByClassName() 通過元素的樣式類名稱來獲得元素(得到的值是元素的集合) 可以由文檔或元素髮起

querySelector
querySelectorAll
都是 通過css選擇器的幫助來選擇元素
querySelector翻譯第一個符合的元素
querySelectorAll返回所有符合要求的元素集合
可以由文檔或元素髮起

2.元素的遍歷

節點,元素和文本都是節點。

						 parentNode

 previousElementSibling                     nextElementSibling

 firstElementChild       children(集合)       lastElementChild

獲取元素的父節點:parentNode()
獲取元素的前一個同胞元素:previousElementSibling()
獲取元素的後一個同胞元素:nextElementSibling()
獲取元素的第一個孩子: firstElementChild()
獲取元素的最後個孩子: lastElementChild()

3.元素的操作

var ul = document.getElementById('ul');
    // 1、創建
    // 創建了一個li元素
    var newLi = document.createElement('li');
    var txt = document.createTextNode('新的');
    newLi.appendChild(txt);
    // newLi.innerHTML = '新的';

    // 2、添加
    // ul.appendChild(newLi)
    // ul.insertBefore(newLi,ul.children[2])

    // 3、替換
    ul.replaceChild(newLi,ul.children[1])

    // 4、克隆
    // cloneNode(bool)
    //     克隆,會克隆元素自身,屬性,不會克隆事件。
    //     參數的真假,負責元素的子孫節點是否被克隆。
    ul.replaceChild(
        newLi.cloneNode(true),
        ul.children[0]
    )

    // 5、移除
    // ul.removeChild(ul.children[2])
    ul.children[1].remove()

4.元素的屬性操作

 // 1、通用的操作
    // setAttribute(name,value)
    // getAttribute(name)
    // removeAttribute(name)
    // hasAttribute(name)  判斷有沒有xx屬性,返回布爾值。

    // 2、系統認可的屬性
    //     元素.name 可讀可寫
    //     id、src、href ...

    // 3、樣式相關的屬性(class、style)
    // class也是系統認可的屬性,但是class是es中的關鍵字,因此,
    // 使用classname屬性名稱來替代class。

    // 元素.style.cssText 可讀可寫,對style屬性的值做整體的設置。
    // 元素.style.cssname 可讀可寫
    //     cssname 如果遇到css名稱有中橫槓,則去掉中橫槓,將其後的字母大寫。


    // 4、表單的屬性操作
    // 表單的值有兩套,默認值(html的代碼值)、真實值(提交值)。
    // 任何表單元素都可以使用value屬性來獲取提交值(包括textarea)
    // checked、selected、readonly、disabled它的值都是布爾值。

注意:
元素.innerText
元素.innerHTML
元素.outerHTML
元素.outerText
innerXX和outerXX的區別:innerXX表示只包含元素標籤之間的內容
而outerXX表示包含連元素標籤在內的內容

5.元素的事件操作

標籤內書寫onclick,實際上是屬性,只是這個屬性關聯到一個事件來執行。
元素的事件有兩個獨立的區域,互不干擾,互相獨立。
唯一區間:只能保留最後一次附加的函數
要移除唯一區間的事件,只需要再次指定事件的處理函數爲null就可以。

監聽區間:
    不會發生覆蓋,要移除必須要知道函數的名稱,匿名函數無法移除。

js可以主動觸發事件,

h1.onclick()
h1.click()
    都可以主動觸發事件,onclick()不會執行瀏覽器與事件關聯的默認動作
    例如a(鏈接)的點擊事件,onclick()不會真的跳轉而click()會跳轉。

事件的分類:
    鼠標事件、鍵盤事件、剪貼板事件、表單事件

(自定義右鍵菜單)實例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>自定義右鍵菜單</title>
    <style>
        #list{
            width: 500px;
            margin: 50px auto;
            border: 1px solid black;
            background-color: red;
        }
        ul{
            margin: 0;
            padding: 0;
            list-style: none;
        }
        li{
            text-indent: 2em;
            line-height: 50px;
            margin: 1px;
            background-color: white;
        }
        #menu{
            position: fixed;
            left: 50%;
            top: 50%;
            background-color: #eee;
            outline: none;
            display: none;
        }
        #menu div{
            padding: 10px 20px;
            cursor:pointer;
        }
        #menu div:hover{
            background-color: #bbbbbb;
        }
    </style>
</head>
<body>
<div id="list">
    <ul>
        <li>111111</li>
        <li>222222</li>
        <li>333333</li>
        <li>444444</li>
        <li>555555</li>
    </ul>
</div>

<!--div默認無法獲得焦點,通過增加屬性的方式讓div可以獲得焦點-->
<div id="menu" tabindex="-1">
    <div>新增</div>
    <div>修改</div>
    <div>刪除</div>
</div>
<script>
    var arrLi = document.querySelectorAll('#list li');
    var menu = document.getElementById('menu');

    // 全局註冊一個變量,記錄當前被點擊的li
    var li;
    // var arrLi = document.getElementById('list').getElementsByTagName('li');

    for(var i=0;i<arrLi.length;i++){
        arrLi[i].oncontextmenu = li_rightClick;
    }
    menu.onblur = menu_blur;
    menu.children[2].onclick = delete_click;

    function li_rightClick(e) {
        // 1、屏蔽系統右鍵菜單
        // return false;是民間做法
        // var e = e || event;
        e.preventDefault();

        // 2、將菜單移動到鼠標所在的位置,並顯示,獲得焦點
        menu.style.left = e.clientX + 'px';
        menu.style.top = e.clientY + 'px';
        menu.style.display = 'block';
        menu.focus();
        // 3、將當前的li記錄到全局
        li = e.target;
    }

    function menu_blur() {
        menu.style.display = 'none';
    }

    function delete_click() {
        // 1、執行刪除
        li.remove();
        // 2、關閉自定義菜單
        menu.blur();
    }
</script>
</body>
</html>

在這裏插入圖片描述

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