初識JS_WebAPI基礎Day3——筆記整理+1課後作業...

一.節點操作

文章目錄
1 . 刪除節點
2. 複製(克隆)節點
3. 創建元素的三種方式
4. innerTHML和createElement效率對比
5.DOM學習總結
二.事件高級
1 . 事件監聽
2. 事件監聽兼容性解決方案
3. 刪除事件(解綁事件)
4. 刪除事件兼容性解決方案
5. 事件對象
6. e.target 和 this 的區別
7.阻止默認行爲
7. 阻止事件冒泡
8.事件委託
9.鼠標事件對象

1. 刪除節點

在這裏插入圖片描述
node.removeChild() 方法從 node節點中刪除一個子節點,返回刪除的節點。

 //  刪除元素  node.removeChild(child)
 ul.removeChild(ul.children[0]);

2. 複製(克隆)節點

在這裏插入圖片描述

// 1. node.cloneNode(); 括號爲空或者裏面是false 淺拷貝 只複製標籤不復制裏面的內容
// 2. node.cloneNode(true); 括號爲true 深拷貝 複製標籤複製裏面的內容

3. 創建元素的三種方式

在這裏插入圖片描述

4. innerTHML和createElement效率對比

innerHTML字符串拼接方式(效率低)

<script>
    function fn() {
        var d1 = +new Date();
        var str = '';
        for (var i = 0; i < 1000; i++) {
            document.body.innerHTML += '<div style="width:100px; height:2px; border:1px solid blue;"></div>';
        }
        var d2 = +new Date();
        console.log(d2 - d1);
    }
    fn();
</script>

createElement方式(效率一般)

<script>
    function fn() {
        var d1 = +new Date();

        for (var i = 0; i < 1000; i++) {
            var div = document.createElement('div');
            div.style.width = '100px';
            div.style.height = '2px';
            div.style.border = '1px solid red';
            document.body.appendChild(div);
        }
        var d2 = +new Date();
        console.log(d2 - d1);
    }
    fn();
</script>

innerHTML數組方式(效率高:常用

<script>
    function fn() {
        var d1 = +new Date();
        var array = [];
        for (var i = 0; i < 1000; i++) {
            array.push('<div style="width:100px; height:2px; border:1px solid blue;"></div>');
        }
        document.body.innerHTML = array.join('');
        var d2 = +new Date();
        console.log(d2 - d1);
    }
    fn();
</script>

5.DOM學習總結

關於dom操作,我們主要針對於元素的操作。主要有創建、增、刪、改、查、屬性操作、事件操作。

1.創建:

document.write
innerHTML
createElement

2.增

appendChild
inserBefore

3.刪

removeChild

4.改

主要修改dom的元素屬性,dom元素的內容、屬性、表單的值等
1.元素屬性:src、href、title等等
2.普通元素內容:innerHTML、innerText
3.修改表單元素:value、type、disabled等
4.樣式:style、className

5.查

1.API方法:getElementById、getElementByTagName 古老語法,不推薦
2.H5新增:querySelector、querySelectorAll 推薦
3.利用節點操作獲取元素:父節點parentNode、子節點children、兄弟previousElementSibling、nextElementSibling  推薦

6.主要針對自定義屬性的操作

1.setAttribute:設置dom的屬性值
2.getAttribute:得到dom屬性值
3.removeAttribute: 移除屬性

二.事件高級

1. 事件監聽

addEventListener()事件監聽(IE9以後支持)
在這裏插入圖片描述
eventTarget.addEventListener()方法將指定的監聽器註冊到 eventTarget(目標對象)上,當該對象觸發指定的事件時,就會執行事件處理函數。
在這裏插入圖片描述

2. 事件監聽兼容性解決方案

封裝一個函數,函數中判斷瀏覽器的類型:
在這裏插入圖片描述

3. 刪除事件(解綁事件)

在這裏插入圖片描述

4. 刪除事件兼容性解決方案

在這裏插入圖片描述
5.dom事件流(面試經典)
☆ 事件流 描述的是從頁面接收事件的順序。
☆ 事件 發生時會在元素節點之間按照特定的順序傳播,這個傳播過程 就爲 DOM事件流

在這裏插入圖片描述
DOM 事件流會經歷3個階段:

  1. 捕獲階段

  2. 當前目標階段

  3. 冒泡階段
    在這裏插入圖片描述

 <div class="father">
        <div class="son">son盒子</div>
 </div>
// 冒泡階段 如果addEventListener 第三個參數是 false 或者 省略 
// son -> father ->body -> html -> document
----------------------------------------
// 捕獲階段:如果addEventListener() 第三個參數是 true 那麼在捕獲階段觸發
// document -> html -> body -> father -> son

5. 事件對象

事件發生後,跟事件相關的一系列信息數據的集合都放到這個對象裏面,這個對象就是事件對象。
常見屬性和方法:
在這裏插入圖片描述

6. e.target 和 this 的區別

  • this 是事件綁定的元素(綁定這個事件處理函數的元素) 。

  • e.target 是事件觸發的元素。

常情況下terget 和 this是一致的,
但有一種情況不同,那就是在事件冒泡時(父子元素有相同事件,單擊子元素,父元素的事件處理函數也會被觸發執行),
這時候this指向的是父元素,因爲它是綁定事件的元素對象,
而target指向的是子元素,因爲他是觸發事件的那個具體元素對象。

7.阻止默認行爲

html中一些標籤有默認行爲,例如a標籤被單擊後,默認會進行頁面跳轉。

 <a href="http://www.baidu.com">百度</a>
<script>
	//  傳統的註冊方式
	a.onclick = function(e) {
	// 普通瀏覽器 e.preventDefault();  方法
	e.preventDefault();
	// 低版本瀏覽器 ie678  returnValue  屬性
	e.returnValue = false;
	// 我們可以利用return false 也能阻止默認行爲 沒有兼容性問題
	return false;
    }
</script>

7. 阻止事件冒泡

在這裏插入圖片描述

8.事件委託

事件委託也稱爲事件代理,在 jQuery 裏面稱爲事件委派。

說白了就是,不給子元素註冊事件,給父元素註冊事件,把處理代碼在父元素的事件中執行。

事件委託的原理
給父元素註冊事件,利用事件冒泡,當子元素的事件觸發,會冒泡到父元素,然後去控制相應的子元素。

9.鼠標事件對象

在這裏插入圖片描述


此部分爲習題部分:

動態添加列表

題目描述

頁面上有一些美女列表,當單擊li時背景色變爲紅色,但點擊按鈕時會新增1個美女到列表最前面,並且單擊新增的美女背景也會變爲紅色,具體表現如下圖:
1)要求使用到事件委託
在這裏插入圖片描述

<body>
  <ul id="ul">
    <li>西施</li>
    <li>貂蟬</li>
    <li>昭君</li>
    <li>鳳姐</li>
    <li>芙蓉姐姐</li>
  </ul>
  <input type="button" value="按鈕" id="btn" />
  <script>
    // 利用事件委託(事件冒泡),給新創建的元素也註冊上事件
    var ul = document.getElementById('ul');
    ul.onclick = function (e) {
      e.target.style.backgroundColor = 'red';
    }
    // 單擊按鈕,添加一個新的li
    var btn = document.getElementById('btn');
    btn.onclick = function(){
      var liObj = document.createElement('li');
      liObj.innerHTML = '楊超越';
      ul.insertBefore(liObj, ul.children[0]);
    }
  </script>
</body>

分享

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