伊人久久大香线蕉综合影视_日韩精品少妇无码受不了_71pao成人国产永久免费视频_国产伦片中文免费观看_国产高清无码麻豆精品_九色综合伊人久久富二代_日韩黄色精品_日韩A∨精品日韩精品无码

[EX]事件捕獲,事件冒泡,事件委托

2018-4-17    seo達人

如果您想訂閱本博客內(nèi)容,每天自動發(fā)到您的郵箱中, 請點這里

1事件流

JavaScript與HTML之間的交互是通過事件實現(xiàn)的。事件,就是文檔或瀏覽器窗口中發(fā)生的一些特定的交互瞬間??梢允褂脗陕犉鱽眍A(yù)訂事件,以便事件發(fā)生時執(zhí)行相應(yīng)的代碼。 
 
事件流的起源:就是在瀏覽器發(fā)展到第四代的時候,瀏覽器開發(fā)團隊遇到一個問題:頁面的哪一部分會擁有某個特定的事件?要明白這個問題問的是什么,可以想象畫在一張紙上的一組同心圓。如果你把手指放在圓心上,那么你的手指指向的不是一個圓,而是紙上的所有圓。也就是說如果單擊了頁面的某個按鈕,同時也單擊了按鈕的容器元素,甚至單擊了整個頁面。不過呢,IE提出的是冒泡流,而網(wǎng)景提出的是捕獲流。

示例:

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>事件流</title> <style type="text/css"> #content{width: 150px;height: 150px;background-color: red;} #btn{width: 80px;height: 80px;background-color: green;} </style> </head> <body> <div id="content">content <div id="btn">button</div> </div> <script type="text/javascript"> var content = document.getElementById("content"); var btn = document.getElementById('btn');
        btn.onclick = function(){ alert("btn");
        };
        content.onclick = function(){ alert("content");
        };
        document.onclick = function(){ alert("document");
        } </script> </body> </html>
    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

如果點擊容器#btn,則彈出的順序是:btn-content-document;如果點擊的是容器#content,則彈出的是content-document;如果點擊的是document,彈出的是document。

由此可以看出JavaScript的事件流機制

前面說過,IE提出的是冒泡流,而網(wǎng)景提出的是捕獲流,后來在W3C組織的統(tǒng)一之下,JS支持了冒泡流和捕獲流,但是目前低版本的IE瀏覽器還是只能支持冒泡流(IE6,IE7,IE8均只支持冒泡流),所以為了能夠兼容更多的瀏覽器,建議大家使用冒泡流。

JS事件流原理圖如下: 
 
這里寫圖片描述 


2事件冒泡與事件捕獲

由此可以知道:

1、一個完整的JS事件流是從window開始,最后回到window的一個過程

2、事件流被分為三個階段(1~5)捕獲過程、(5~6)目標(biāo)過程、(6~10)冒泡過程

示例:

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <style type="text/css"> #wrapDiv, #innerP, #textSpan{ margin: 5px;padding: 5px;box-sizing: border-box;cursor: default; } #wrapDiv{ width: 300px;height: 300px;border: indianred 3px solid; } #innerP{ width: 200px;height: 200px;border: hotpink 3px solid; } #textSpan{ display: block;width: 100px;height: 100px;border: orange 3px solid; } </style> </head> <body> <div id="wrapDiv">wrapDiv <p id="innerP">innerP <span id="textSpan">textSpan</span> </p> </div> <script> var wrapDiv = document.getElementById("wrapDiv"); var innerP = document.getElementById("innerP"); var textSpan = document.getElementById("textSpan"); // 捕獲階段綁定事件 window.addEventListener("click", function(e){ console.log("window 捕獲", e.target.nodeName, e.currentTarget.nodeName);
    }, true);

    document.addEventListener("click", function(e){ console.log("document 捕獲", e.target.nodeName, e.currentTarget.nodeName);
    }, true);

    document.documentElement.addEventListener("click", function(e){ console.log("documentElement 捕獲", e.target.nodeName, e.currentTarget.nodeName);
    }, true);

    document.body.addEventListener("click", function(e){ console.log("body 捕獲", e.target.nodeName, e.currentTarget.nodeName);
    }, true);

    wrapDiv.addEventListener("click", function(e){ console.log("wrapDiv 捕獲", e.target.nodeName, e.currentTarget.nodeName);
    }, true);

    innerP.addEventListener("click", function(e){ console.log("innerP 捕獲", e.target.nodeName, e.currentTarget.nodeName);
    }, true);

    textSpan.addEventListener("click", function(e){ console.log("textSpan 捕獲", e.target.nodeName, e.currentTarget.nodeName);
    }, true); // 冒泡階段綁定的事件 window.addEventListener("click", function(e){ console.log("window 冒泡", e.target.nodeName, e.currentTarget.nodeName);
    }, false);

    document.addEventListener("click", function(e){ console.log("document 冒泡", e.target.nodeName, e.currentTarget.nodeName);
    }, false);

    document.documentElement.addEventListener("click", function(e){ console.log("documentElement 冒泡", e.target.nodeName, e.currentTarget.nodeName);
    }, false);

    document.body.addEventListener("click", function(e){ console.log("body 冒泡", e.target.nodeName, e.currentTarget.nodeName);
    }, false);

    wrapDiv.addEventListener("click", function(e){ console.log("wrapDiv 冒泡", e.target.nodeName, e.currentTarget.nodeName);
    }, false);

    innerP.addEventListener("click", function(e){ console.log("innerP 冒泡", e.target.nodeName, e.currentTarget.nodeName);
    }, false);

    textSpan.addEventListener("click", function(e){ console.log("textSpan 冒泡", e.target.nodeName, e.currentTarget.nodeName);
    }, false); </script> </body> </html>
    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91

這個時候,如果點擊一下textSpan這個元素,控制臺會打印出這樣的內(nèi)容: 
 
這里寫圖片描述

從上面所畫的事件傳播的過程能夠看出來,當(dāng)點擊鼠標(biāo)后,會先發(fā)生事件的捕獲

· 捕獲階段:首先window會獲捕獲到事件,之后document、documentElement、body會捕獲到,再之后就是在body中DOM元素一層一層的捕獲到事件,有wrapDiv、innerP。

· 目標(biāo)階段:真正點擊的元素textSpan的事件發(fā)生了兩次,因為在上面的JavaScript代碼中,textSapn既在捕獲階段綁定了事件,又在冒泡階段綁定了事件,所以發(fā)生了兩次。但是這里有一點是需要注意,在目標(biāo)階段并不一定先發(fā)生在捕獲階段所綁定的事件,而是先綁定的事件發(fā)生,一會會解釋一下。

· 冒泡階段:會和捕獲階段相反的步驟將事件一步一步的冒泡到window

上述代碼中的兩個屬性:e.target和e.currentTarget

target和currentTarget都是event上面的屬性,target是真正發(fā)生事件的DOM元素,而currentTarget是當(dāng)前事件發(fā)生在哪個DOM元素上。

可以結(jié)合控制臺打印出來的信息理解下,目標(biāo)階段也就是 target == currentTarget的時候。我沒有打印它們兩個因為太長了,所以打印了它們的nodeName,但是由于window沒有nodeName這個屬性,所以是undefined。

那可能有一個疑問,我們不用addEventListener綁定的事件會發(fā)生在哪個階段呢,我們來一個測試,順便再演示一下我在上面的目標(biāo)階段所說的目標(biāo)階段并不一定先發(fā)生捕獲階段所綁定的事件是怎么一回事。

<script>
    var wrapDiv = document.getElementById("wrapDiv"); var innerP = document.getElementById("innerP"); var textSpan = document.getElementById("textSpan"); // 測試直接綁定的事件到底發(fā)生在哪個階段
    wrapDiv.onclick = function(){
        console.log("wrapDiv onclick 測試直接綁定的事件到底發(fā)生在哪個階段")
    }; // 捕獲階段綁定事件
    window.addEventListener("click", function(e){
        console.log("window 捕獲", e.target.nodeName, e.currentTarget.nodeName); }, true); document.addEventListener("click", function(e){
        console.log("document 捕獲", e.target.nodeName, e.currentTarget.nodeName); }, true); document.documentElement.addEventListener("click", function(e){
        console.log("documentElement 捕獲", e.target.nodeName, e.currentTarget.nodeName); }, true); document.body.addEventListener("click", function(e){
        console.log("body 捕獲", e.target.nodeName, e.currentTarget.nodeName); }, true); wrapDiv.addEventListener("click", function(e){
        console.log("wrapDiv 捕獲", e.target.nodeName, e.currentTarget.nodeName); }, true); innerP.addEventListener("click", function(e){
        console.log("innerP 捕獲", e.target.nodeName, e.currentTarget.nodeName); }, true); textSpan.addEventListener("click", function(){
        console.log("textSpan 冒泡 在捕獲之前綁定的")
    }, false); textSpan.onclick = function(){
        console.log("textSpan onclick")
    }; textSpan.addEventListener("click", function(e){
        console.log("textSpan 捕獲", e.target.nodeName, e.currentTarget.nodeName); }, true); // 冒泡階段綁定的事件
    window.addEventListener("click", function(e){
        console.log("window 冒泡", e.target.nodeName, e.currentTarget.nodeName); }, false); document.addEventListener("click", function(e){
        console.log("document 冒泡", e.target.nodeName, e.currentTarget.nodeName); }, false); document.documentElement.addEventListener("click", function(e){
        console.log("documentElement 冒泡", e.target.nodeName, e.currentTarget.nodeName); }, false); document.body.addEventListener("click", function(e){
        console.log("body 冒泡", e.target.nodeName, e.currentTarget.nodeName); }, false); wrapDiv.addEventListener("click", function(e){
        console.log("wrapDiv 冒泡", e.target.nodeName, e.currentTarget.nodeName); }, false); innerP.addEventListener("click", function(e){
        console.log("innerP 冒泡", e.target.nodeName, e.currentTarget.nodeName); }, false); textSpan.addEventListener("click", function(e){
        console.log("textSpan 冒泡", e.target.nodeName, e.currentTarget.nodeName); }, false); </script>
    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76

控制臺打印如下:

這里寫圖片描述

· textSpan是被點擊的元素,也就是目標(biāo)元素,所有在textSpan上綁定的事件都會發(fā)生在目標(biāo)階段,在綁定捕獲代碼之前寫了綁定的冒泡階段的代碼,所以在目標(biāo)元素上就不會遵守先發(fā)生捕獲后發(fā)生冒泡這一規(guī)則,而是先綁定的事件先發(fā)生。 

[在目標(biāo)元素上就不會遵守先發(fā)生捕獲后發(fā)生冒泡這一規(guī)則,而是先綁定的事件先發(fā)生。]

· 由于wrapDiv不是目標(biāo)元素,所以它上面綁定的事件會遵守先發(fā)生捕獲后發(fā)生冒泡的規(guī)則。所以很明顯用onclick直接綁定的事件發(fā)生在了冒泡階段。


3事件綁定

1、直接獲取元素綁定:

element.onclick = function(e){
        // ... };
    
  • 1
  • 2
  • 3

優(yōu)點:簡單和穩(wěn)定,可以確保它在你使用的不同瀏覽器中運作一致;處理事件時,this關(guān)鍵字引用的是當(dāng)前元素,這很有幫助。

缺點:只會在事件冒泡中運行;一個元素一次只能綁定一個事件處理函數(shù),新綁定的事件處理函數(shù)會覆蓋舊的事件處理函數(shù);事件對象參數(shù)(e)僅非IE瀏覽器可用。


2、直接在元素里面使用事件屬性

3、W3C方法:

element.addEventListener('click', function(e){
        // ... }, false);
    
  • 1
  • 2
  • 3

優(yōu)點:該方法同時支持事件處理的捕獲和冒泡階段;事件階段取決于addEventListener最后的參數(shù)設(shè)置:false (冒泡) 或 true (捕獲);在事件處理函數(shù)內(nèi)部,this關(guān)鍵字引用當(dāng)前元素;事件對象總是可以通過處理函數(shù)的第一個參數(shù)(e)捕獲;可以為同一個元素綁定你所希望的多個事件,同時并不會覆蓋先前綁定的事件

缺點:IE不支持,你必須使用IE的attachEvent函數(shù)替代。


IE下的方法:

element.attachEvent('onclick', function(){
        // ... });
    
  • 1
  • 2
  • 3

優(yōu)點:可以為同一個元素綁定你所希望的多個事件,同時并不會覆蓋先前綁定的事件。 
 
缺點:IE僅支持事件捕獲的冒泡階段;事件監(jiān)聽函數(shù)內(nèi)的this關(guān)鍵字指向了window對象,而不是當(dāng)前元素(IE的一個巨大缺點);事件對象僅存在與window.event參數(shù)中;事件必須以ontype的形式命名,比如,onclick而非click;僅IE可用,你必須在非IE瀏覽器中使用W3C的addEventListener。

注意:不是意味這低版本的ie沒有事件捕獲,它也是先發(fā)生事件捕獲,再發(fā)生事件冒泡,只不過這個過程無法通過程序控制。 


4解除事件

通用:

element.removeEventListener('click', function(e){
        // ... }, false);
    
  • 1
  • 2
  • 3

IE:

element.detachEvent('onclick', function(){
        // ... });
    
  • 1
  • 2
  • 3

5阻止事件傳播

在支持addEventListener()的瀏覽器中,可以調(diào)用事件對象的stopPropagation()方法以阻止事件的繼續(xù)傳播。如果在同一對象上定義了其他處理程序,剩下的處理程序?qū)⒁琅f被調(diào)用,但調(diào)用stopPropagation()之后任何其他對象上的事件處理程序?qū)⒉粫徽{(diào)用。不僅可以阻止事件在冒泡階段的傳播,還能阻止事件在捕獲階段的傳播。

IE9之前的IE不支持stopPropagation()方法,而是設(shè)置事件對象cancelBubble屬性為true來實現(xiàn)阻止事件進一步傳播。

<script>
    var wrapDiv = document.getElementById("wrapDiv"); var innerP = document.getElementById("innerP"); var textSpan = document.getElementById("textSpan"); // 測試直接綁定的事件到底發(fā)生在哪個階段
    wrapDiv.onclick = function(){
        console.log("wrapDiv onclick 測試直接綁定的事件到底發(fā)生在哪個階段")
    }; // 捕獲階段綁定事件
    window.addEventListener("click", function(e){
        console.log("window 捕獲", e.target.nodeName, e.currentTarget.nodeName); }, true); document.addEventListener("click", function(e){
        console.log("document 捕獲", e.target.nodeName, e.currentTarget.nodeName); }, true); document.documentElement.addEventListener("click", function(e){
        console.log("documentElement 捕獲", e.target.nodeName, e.currentTarget.nodeName); }, true); document.body.addEventListener("click", function(e){
        console.log("body 捕獲", e.target.nodeName, e.currentTarget.nodeName); }, true); wrapDiv.addEventListener("click", function(e){
        console.log("wrapDiv 捕獲", e.target.nodeName, e.currentTarget.nodeName); // 在捕獲階段阻止事件的傳播
        e.stopPropagation(); }, true); innerP.addEventListener("click", function(e){
        console.log("innerP 捕獲", e.target.nodeName, e.currentTarget.nodeName); }, true); textSpan.addEventListener("click", function(){
        console.log("textSpan 冒泡 在捕獲之前綁定的")
    }, false); textSpan.onclick = function(){
        console.log("textSpan onclick")
    }; textSpan.addEventListener("click", function(e){
        console.log("textSpan 捕獲", e.target.nodeName, e.currentTarget.nodeName); }, true); // 冒泡階段綁定的事件
    window.addEventListener("click", function(e){
        console.log("window 冒泡", e.target.nodeName, e.currentTarget.nodeName); }, false); document.addEventListener("click", function(e){
        console.log("document 冒泡", e.target.nodeName, e.currentTarget.nodeName); }, false); document.documentElement.addEventListener("click", function(e){
        console.log("documentElement 冒泡", e.target.nodeName, e.currentTarget.nodeName); }, false); document.body.addEventListener("click", function(e){
        console.log("body 冒泡", e.target.nodeName, e.currentTarget.nodeName); }, false); wrapDiv.addEventListener("click", function(e){
        console.log("wrapDiv 冒泡", e.target.nodeName, e.currentTarget.nodeName); }, false); innerP.addEventListener("click", function(e){
        console.log("innerP 冒泡", e.target.nodeName, e.currentTarget.nodeName); }, false); textSpan.addEventListener("click", function(e){
        console.log("textSpan 冒泡", e.target.nodeName, e.currentTarget.nodeName); }, false); </script>
    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78

這里寫圖片描述

實際上我們點擊的是textSpan,但是由于在捕獲階段事件就被阻止了傳播,所以在textSpan上綁定的事件根本就沒有發(fā)生,冒泡階段綁定的事件自然也不會發(fā)生,因為阻止事件在捕獲階段傳播的特性,e.stopPropagation()很少用到在捕獲階段去阻止事件的傳播,大家就以為e.stopPropagation()只能阻止事件在冒泡階段傳播。 


6阻止事件的默認(rèn)行為

e.preventDefault()可以阻止事件的默認(rèn)行為發(fā)生,默認(rèn)行為是指:點擊a標(biāo)簽就轉(zhuǎn)跳到其他頁面、拖拽一個圖片到瀏覽器會自動打開、點擊表單的提交按鈕會提交表單等等,因為有的時候我們并不希望發(fā)生這些事情,所以需要阻止默認(rèn)行為。

IE9之前的IE中,可以通過設(shè)置事件對象的returnValue屬性為false達到同樣的效果。

function cancelHandler(event){ var event=event||window.event;//兼容IE //取消事件相關(guān)的默認(rèn)行為 if(event.preventDefault) //標(biāo)準(zhǔn)技術(shù) event.preventDefault(); if(event.returnValue) //兼容IE9之前的IE event.returnValue=false; return false; //用于處理使用對象屬性注冊的處理程序 }
    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

7事件委托

在JavaScript中,添加到頁面上的事件處理程序數(shù)量將直接關(guān)系到頁面的整體運行性能。導(dǎo)致這一問題的原因是多方面的。首先,每個函數(shù)都是對象,都會占用內(nèi)存;內(nèi)存中的對象越多,性能就越差。其次,必須事先指定所有事件處理程序而導(dǎo)致的DOM訪問次數(shù),會延遲整個頁面的交互就緒時間。

對“事件處理程序過多”問題的解決方案就是事件委托。事件委托利用了事件冒泡,只指定一個事件處理程序,就可以管理某一類型的所有事件。例如,click事件會一直冒泡到document層次。也就是說,我們可以為整個頁面指定一個onclick事件處理程序,而不必給每個可單擊的元素分別添加事件處理程序。

在父級上定義了函數(shù),當(dāng)點擊目標(biāo)時,會向上冒泡,到父級執(zhí)行操作。每一個子元素,都會統(tǒng)一冒泡到父級然后執(zhí)行。

<ul id="color-list"> <li>red</li> <li>yellow</li> <li>blue</li> <li>green</li> <li>black</li> <li>white</li> </ul>
    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

如果點擊頁面中的li元素,然后輸出li當(dāng)中的顏色,我們通常會這樣寫:

(function(){
    var color_list = document.getElementById('color-list'); var colors = color_list.getElementsByTagName('li'); for(var i=0;i<colors.length;i++){ colors[i].addEventListener('click',showColor,false); }; function showColor(e){
        var x = e.target; alert("The color is " + x.innerHTML); }; })();
    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

利用事件流的特性,我們只綁定一個事件處理函數(shù)也可以完成:

(function(){
    var color_list = document.getElementById('color-list'); color_list.addEventListener('click',showColor,false); function showColor(e){
        var x = e.target; if(x.nodeName.toLowerCase() === 'li'){
            alert('The color is ' + x.innerHTML); } } })();
    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

事件委托還有一個好處就是添加進來的元素也能綁定事件:

沒有使用事件委托:

<body> <ul id="thl"> <li>001</li> <li>002</li> <li>003</li> </ul> <button onclick="fun()">touch</button> <script> var thl= document.getElementById('thl'); var aLi = thl.getElementsByTagName('li'); for (var i = 0; i < aLi.length; i++) {
      aLi[i].onclick = fn;
    } function fn (){ console.log(this.innerHTML);
    } function fun(){ var node=document.createElement("li"); var textnode=document.createTextNode("maomaoliang");
        node.appendChild(textnode);
        document.getElementById("thl").appendChild(node);
    } </script> </body>
    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27

使用了事件委托:

<script> var thl= document.getElementById('thl');
    thl.onclick = function(ev) { ev = ev || event; //兼容處理 var target = ev.target || ev.srcElement; //找到li元素 if (target.nodeName.toLowerCase() == 'li') {
              console.log(target.innerHTML);
         }
    }; function fun(){ var node=document.createElement("li"); var textnode=document.createTextNode("maomaoliang");
        node.appendChild(textnode);
        document.getElementById("thl").appendChild(node);
    } </script>
藍(lán)藍(lán)設(shè)計m.cqzjtgb.com )是一家專注而深入的界面設(shè)計公司,為期望卓越的國內(nèi)外企業(yè)提供卓越的UI界面設(shè)計、BS界面設(shè)計 、 cs界面設(shè)計 、 ipad界面設(shè)計 、 包裝設(shè)計 、 圖標(biāo)定制 、 用戶體驗 、交互設(shè)計、 網(wǎng)站建設(shè) 、平面設(shè)計服務(wù)

日歷

鏈接

個人資料

存檔

真实男女啪啪啪动态图| 天堂√8在线中文| 亚洲avbb在线观看| 1000部很黄的大片| 亚洲精品影视一区二区三区av| 免费观看精品视频网站| 在线国产一区二区在线| 高清毛片免费观看视频网站| 婷婷精品国产亚洲av| 90打野战视频偷拍视频| 亚洲国产高清在线一区二区三| 精品一区二区三区视频在线 | 国产主播在线观看一区二区| 国产熟女xx| 国产成人欧美在线观看| 中文字幕熟女人妻在线| 亚洲国产欧美网| 天美传媒精品一区二区| eeuss影院久久| 91字幕亚洲| 日韩精品中文字幕看吧| 国产欧美日韩精品一区二区| 男女做爰动态图高潮gif福利片| 最近最新中文字幕大全电影3| 99国产综合亚洲精品| 五月玫瑰六月丁香| 一个人免费在线观看的高清视频| 一个人免费在线观看的高清视频| 色吧在线观看| 中文亚洲av片在线观看爽| 韩国av一区二区三区四区| 国产精品久久久久久久久免 | 亚洲国产日韩欧美精品在线观看 | 亚洲专区国产一区二区| 欧美精品啪啪一区二区三区| 精品久久久久久久人妻蜜臀av| 日日夜夜操网爽| 国产成人a区在线观看| 国产av一区在线观看免费| 亚洲精品乱码久久久v下载方式 | 欧美日本视频| 精品国产超薄肉色丝袜足j| 日韩成人在线观看一区二区三区| 99精品欧美一区二区三区四区| 免费观看人在逋| 成人性生交大片免费视频hd| 国产综合懂色| 少妇高潮的动态图| 一个人看的www免费观看视频| 亚洲专区中文字幕在线| 精品国产三级普通话版| 最近视频中文字幕2019在线8| 午夜免费激情av| 桃红色精品国产亚洲av| 成年免费大片在线观看| 两个人看的免费小视频| 亚洲最大成人中文| 国产乱人视频| 久久中文看片网| 国产黄色小视频在线观看| 好男人在线观看高清免费视频| 国产精品久久久久久久久免 | 99riav亚洲国产免费| 国产精品美女特级片免费视频播放器| 国产综合懂色| 一级黄色大片毛片| 村上凉子中文字幕在线| 动漫黄色视频在线观看| 日本免费一区二区三区高清不卡| 亚洲国产欧洲综合997久久,| 欧美成人a在线观看| x7x7x7水蜜桃| 波多野结衣巨乳人妻| 不卡一级毛片| 亚洲片人在线观看| 国产黄a三级三级三级人| 久久久久久久午夜电影| 午夜老司机福利剧场| 性欧美人与动物交配| 怎么达到女性高潮| 国产精品99久久99久久久不卡| 国产野战对白在线观看| АⅤ资源中文在线天堂| 中亚洲国语对白在线视频| 欧美色欧美亚洲另类二区| 午夜久久久久精精品| 搞女人的毛片| 久久久久久人人人人人| 婷婷六月久久综合丁香| 午夜亚洲福利在线播放| 国产成人aa在线观看| 中文字幕人妻熟人妻熟丝袜美 | 亚洲中文字幕一区二区三区有码在线看| 久久久久免费精品人妻一区二区| 久久人人精品亚洲av| 尤物成人国产欧美一区二区三区| 69av精品久久久久久| 成人av一区二区三区在线看| 欧美激情久久久久久爽电影| 亚洲色图av天堂| 免费看光身美女| 美女被艹到高潮喷水动态| 天堂av国产一区二区熟女人妻| 欧美乱码精品一区二区三区| 中文资源天堂在线| 特级一级黄色大片| 国产精品99久久久久久久久| 日韩精品中文字幕看吧| 一级黄色大片毛片| 99视频精品全部免费 在线| 欧美乱色亚洲激情| www日本在线高清视频| 在线a可以看的网站| 久久久久久人人人人人| 国产男靠女视频免费网站| 国产av在哪里看| АⅤ资源中文在线天堂| 嫁个100分男人电影在线观看| 国产真实乱freesex| 亚洲天堂国产精品一区在线| 国语自产精品视频在线第100页| 久久人人精品亚洲av| 欧美性猛交黑人性爽| 国产亚洲精品久久久com| 亚洲人成网站在线播| 18+在线观看网站| 人妻夜夜爽99麻豆av| 99热只有精品国产| 精品久久久久久久末码| 99热这里只有精品一区| 久久国产精品影院| 少妇裸体淫交视频免费看高清| 搡女人真爽免费视频火全软件 | 久久精品国产99精品国产亚洲性色| 国产毛片a区久久久久| 国产精品久久久久久精品电影| 国产亚洲精品久久久com| 午夜视频国产福利| 亚洲成人精品中文字幕电影| 18禁裸乳无遮挡免费网站照片| 男女那种视频在线观看| 99久久久亚洲精品蜜臀av| 90打野战视频偷拍视频| 亚洲av不卡在线观看| 免费av不卡在线播放| 国产精品一区二区三区四区久久| 国产精品亚洲av一区麻豆| 欧美不卡视频在线免费观看| 99热只有精品国产| 51国产日韩欧美| 无限看片的www在线观看| 九九久久精品国产亚洲av麻豆| 国产亚洲精品久久久com| 麻豆一二三区av精品| 亚洲自拍偷在线| 色精品久久人妻99蜜桃| 99精品在免费线老司机午夜| 五月伊人婷婷丁香| 午夜福利视频1000在线观看| 国产成+人综合+亚洲专区| 亚洲片人在线观看| 国产淫片久久久久久久久 | 亚洲精品一卡2卡三卡4卡5卡| 日韩欧美三级三区| 亚洲人成伊人成综合网2020| 老熟妇乱子伦视频在线观看| 久久久国产精品麻豆| 老司机午夜福利在线观看视频| 国产精品98久久久久久宅男小说| 噜噜噜噜噜久久久久久91| 亚洲avbb在线观看| 三级国产精品欧美在线观看| 国产高清有码在线观看视频| 亚洲欧美日韩高清在线视频| 男插女下体视频免费在线播放| 欧美最黄视频在线播放免费| 一a级毛片在线观看| 男人的好看免费观看在线视频| 窝窝影院91人妻| 日韩欧美精品v在线| 久久天躁狠狠躁夜夜2o2o| 日本三级黄在线观看| 久久精品国产亚洲av涩爱 | 亚洲国产欧美网| 免费av不卡在线播放| 国内少妇人妻偷人精品xxx网站| 久久久成人免费电影| 欧美成人性av电影在线观看| 国产亚洲欧美98| 在线国产一区二区在线| 久久久久久九九精品二区国产| 中文字幕人妻丝袜一区二区| 午夜老司机福利剧场| 黄色丝袜av网址大全| 婷婷精品国产亚洲av| 男女下面进入的视频免费午夜| 最近最新中文字幕大全免费视频| 色视频www国产| 18+在线观看网站| 亚洲精品在线观看二区| a级毛片a级免费在线| 女警被强在线播放| 午夜久久久久精精品| 成人国产综合亚洲| 免费高清视频大片| 两人在一起打扑克的视频| 女同久久另类99精品国产91| 亚洲精品美女久久久久99蜜臀| 午夜老司机福利剧场| 中文字幕av在线有码专区| 日本黄大片高清| 哪里可以看免费的av片| 国产69精品久久久久777片| 国产精品99久久99久久久不卡| 19禁男女啪啪无遮挡网站| 欧美黄色淫秽网站| 成年女人看的毛片在线观看| 日韩av在线大香蕉| 中文字幕久久专区| 亚洲精品日韩av片在线观看 | 国产精品乱码一区二三区的特点| 亚洲熟妇熟女久久| 特大巨黑吊av在线直播| 欧美日韩黄片免| 欧美一区二区亚洲| 国产高清videossex| 国产精品久久久久久亚洲av鲁大| 久久性视频一级片| 国产伦在线观看视频一区| 他把我摸到了高潮在线观看| 亚洲一区高清亚洲精品| 在线天堂最新版资源| or卡值多少钱| 黑人欧美特级aaaaaa片| 亚洲自拍偷在线| 一本一本综合久久| 又黄又爽又免费观看的视频| 国产精品精品国产色婷婷| 真实男女啪啪啪动态图| 亚洲成人中文字幕在线播放| 日本撒尿小便嘘嘘汇集6| 成人特级黄色片久久久久久久| 制服丝袜大香蕉在线| 久久久精品大字幕| 久久精品国产自在天天线| 一级作爱视频免费观看| 在线观看66精品国产| 久久久久久大精品| 观看免费一级毛片| 五月伊人婷婷丁香| 非洲黑人性xxxx精品又粗又长| 欧美区成人在线视频| 免费观看人在逋| 精品国内亚洲2022精品成人| 久久久久久久久大av| 欧美3d第一页| 伊人久久大香线蕉亚洲五| 日韩欧美精品免费久久 | 精品久久久久久,| 一本久久中文字幕| 伊人久久精品亚洲午夜| 国产黄a三级三级三级人| 欧美国产日韩亚洲一区| 久久国产乱子伦精品免费另类| 久久久色成人| 熟女电影av网| 一个人免费在线观看电影| 日日摸夜夜添夜夜添小说| 99久久精品热视频| 狂野欧美激情性xxxx| 老熟妇仑乱视频hdxx| 欧美在线一区亚洲| 色综合婷婷激情| 天堂动漫精品| 国产av一区在线观看免费| 欧美av亚洲av综合av国产av| bbb黄色大片| 麻豆成人av在线观看| 日本免费a在线| 波多野结衣巨乳人妻| 97超视频在线观看视频| 色av中文字幕| 一级a爱片免费观看的视频| 中文字幕精品亚洲无线码一区| 国产午夜福利久久久久久| 欧美黑人巨大hd| 搡老熟女国产l中国老女人| 亚洲国产欧洲综合997久久,| 国产高清三级在线| 精品国产三级普通话版| 久久久国产成人精品二区| 精品人妻偷拍中文字幕| 欧美成人a在线观看| 欧美绝顶高潮抽搐喷水| 色综合站精品国产| 日韩大尺度精品在线看网址| 日韩欧美三级三区| 亚洲第一电影网av| 在线视频色国产色| 99久久精品国产亚洲精品| 身体一侧抽搐| 一区二区三区免费毛片| 少妇熟女aⅴ在线视频| 最近视频中文字幕2019在线8| 看免费av毛片| 国产精品一区二区三区四区久久| 亚洲在线自拍视频| 久久这里只有精品中国| 色综合欧美亚洲国产小说| 亚洲专区中文字幕在线| 国产欧美日韩一区二区精品| 精品一区二区三区视频在线观看免费| 国产成人影院久久av| 欧美日韩瑟瑟在线播放| 极品教师在线免费播放| 一区二区三区国产精品乱码| 国产一区二区亚洲精品在线观看| 脱女人内裤的视频| 宅男免费午夜| 精品久久久久久成人av| 美女免费视频网站| 夜夜夜夜夜久久久久| 日韩人妻高清精品专区| tocl精华| 夜夜看夜夜爽夜夜摸| 国产精品 国内视频| 免费看光身美女| 香蕉丝袜av| 国产亚洲av嫩草精品影院| 久久国产精品影院| 国产精品 国内视频| 日韩精品中文字幕看吧| 日日干狠狠操夜夜爽| 国产精品亚洲美女久久久| 中文字幕熟女人妻在线| 一级毛片高清免费大全| 变态另类丝袜制服| 精品国内亚洲2022精品成人| 亚洲国产欧洲综合997久久,| 免费在线观看日本一区| 精品乱码久久久久久99久播| 久久人妻av系列| 国产精品av视频在线免费观看| 老司机午夜福利在线观看视频| 亚洲乱码一区二区免费版| 美女cb高潮喷水在线观看| 白带黄色成豆腐渣| 欧美日韩乱码在线| 国产午夜精品论理片| 乱人视频在线观看| 在线国产一区二区在线| 国产精品一区二区三区四区久久| 两个人看的免费小视频| 宅男免费午夜| 天堂网av新在线| 亚洲自拍偷在线| 两人在一起打扑克的视频| 波多野结衣高清无吗| 日本一二三区视频观看| 日本黄色视频三级网站网址| 真人一进一出gif抽搐免费| 亚洲 欧美 日韩 在线 免费| 欧美成狂野欧美在线观看| 精品国产亚洲在线| 美女cb高潮喷水在线观看| 亚洲成人免费电影在线观看| 国产精品久久视频播放| av福利片在线观看| 最后的刺客免费高清国语| 国语自产精品视频在线第100页| 国产精品久久久久久人妻精品电影| 色老头精品视频在线观看| 国产高清有码在线观看视频| h日本视频在线播放| 亚洲aⅴ乱码一区二区在线播放| 亚洲国产日韩欧美精品在线观看 | 国产毛片a区久久久久| 亚洲欧美日韩卡通动漫| 亚洲欧美日韩东京热| 国产黄色小视频在线观看| 欧美绝顶高潮抽搐喷水| 亚洲欧美日韩卡通动漫| 国产黄片美女视频| 一区二区三区免费毛片| 成人特级黄色片久久久久久久| 国产精华一区二区三区| 麻豆久久精品国产亚洲av| 一本一本综合久久| ponron亚洲| 三级毛片av免费| 人人妻,人人澡人人爽秒播| 少妇人妻精品综合一区二区 | 99久久精品热视频| 国产综合懂色| 国产黄a三级三级三级人| 天堂av国产一区二区熟女人妻| 久久久国产精品麻豆| 亚洲av成人精品一区久久| 亚洲精品色激情综合| 人妻丰满熟妇av一区二区三区| 国产av不卡久久| 国产精品电影一区二区三区| 乱人视频在线观看| 亚洲va日本ⅴa欧美va伊人久久| 久久6这里有精品| 国语自产精品视频在线第100页| 午夜福利在线观看吧| 在线观看免费视频日本深夜| 精品欧美国产一区二区三| 12—13女人毛片做爰片一| bbb黄色大片| 人人妻人人澡欧美一区二区| 国产单亲对白刺激| 一区福利在线观看| 最新美女视频免费是黄的| 在线免费观看的www视频| 人妻丰满熟妇av一区二区三区| 亚洲国产欧美人成| 久久久久免费精品人妻一区二区| 亚洲aⅴ乱码一区二区在线播放| 一个人看的www免费观看视频| 日韩欧美精品免费久久 | 19禁男女啪啪无遮挡网站| 午夜免费男女啪啪视频观看 | 九九在线视频观看精品| 成年人黄色毛片网站| 一进一出抽搐gif免费好疼| 国产成人av教育| 亚洲美女黄片视频| 亚洲男人的天堂狠狠| 国产蜜桃级精品一区二区三区| 欧美大码av| 国产国拍精品亚洲av在线观看 | 长腿黑丝高跟| 在线播放无遮挡| 在线观看美女被高潮喷水网站 | 悠悠久久av| 18禁黄网站禁片午夜丰满| 99国产极品粉嫩在线观看| 99久久综合精品五月天人人| 宅男免费午夜| 少妇的逼水好多| 99国产综合亚洲精品| 欧美激情久久久久久爽电影| 男人的好看免费观看在线视频| 精品一区二区三区人妻视频| 国产日本99.免费观看| 美女大奶头视频| 精品久久久久久成人av| 亚洲精品色激情综合| 麻豆一二三区av精品| 高清日韩中文字幕在线| 怎么达到女性高潮| 国产一区二区三区在线臀色熟女| 天天一区二区日本电影三级| 久久精品91无色码中文字幕| 国产99白浆流出| 中文字幕精品亚洲无线码一区| 亚洲国产精品sss在线观看| 国产精品 欧美亚洲| 日韩欧美三级三区| 国产激情欧美一区二区| 国产一区二区三区在线臀色熟女| 成人高潮视频无遮挡免费网站| 欧美成人一区二区免费高清观看| 国产亚洲精品久久久久久毛片| 国产精品嫩草影院av在线观看 | 欧美日韩国产亚洲二区| av视频在线观看入口| 全区人妻精品视频| av女优亚洲男人天堂| 日本与韩国留学比较| 人妻久久中文字幕网| 黄片小视频在线播放| 一区二区三区国产精品乱码| 亚洲七黄色美女视频| 免费av不卡在线播放| 精品一区二区三区视频在线 | 午夜久久久久精精品| 亚洲精品国产精品久久久不卡| 搡老熟女国产l中国老女人| 国产精品 国内视频| 12—13女人毛片做爰片一| 欧美黄色淫秽网站| 欧美午夜高清在线| 免费人成在线观看视频色| 在线观看美女被高潮喷水网站 | 亚洲精品亚洲一区二区| 99久国产av精品| 精品乱码久久久久久99久播| 人人妻人人看人人澡| 69人妻影院| 国产精品98久久久久久宅男小说| 久久久国产成人免费| av中文乱码字幕在线| 日本撒尿小便嘘嘘汇集6| 日本五十路高清| 国产单亲对白刺激| 美女黄网站色视频| 人人妻人人看人人澡| 一个人免费在线观看电影| 国产亚洲精品久久久久久毛片| 少妇人妻精品综合一区二区 | 成年女人永久免费观看视频| 欧美色欧美亚洲另类二区| 久久99热这里只有精品18| 看片在线看免费视频| 欧美在线一区亚洲| 每晚都被弄得嗷嗷叫到高潮| 成年女人毛片免费观看观看9| 久久久久久久久大av| 中文字幕av在线有码专区| 一个人观看的视频www高清免费观看| 我的老师免费观看完整版| 国产亚洲欧美98| 91麻豆精品激情在线观看国产| 亚洲中文日韩欧美视频| 欧美黑人巨大hd| 日本免费一区二区三区高清不卡| 人妻久久中文字幕网| АⅤ资源中文在线天堂| 少妇熟女aⅴ在线视频| 久久久色成人| 丁香欧美五月| 男女那种视频在线观看| 免费看美女性在线毛片视频| 在线a可以看的网站| 99热6这里只有精品| 婷婷六月久久综合丁香| 成人精品一区二区免费| 欧美一区二区亚洲| 99视频精品全部免费 在线| 日本撒尿小便嘘嘘汇集6| 一进一出好大好爽视频| 中文字幕高清在线视频| 18美女黄网站色大片免费观看| 日本免费一区二区三区高清不卡| 99热这里只有精品一区| 亚洲熟妇熟女久久| 99久久九九国产精品国产免费| 亚洲人成电影免费在线| www日本黄色视频网| 啦啦啦韩国在线观看视频| 91久久精品国产一区二区成人 | 久久久久九九精品影院| 久久人人精品亚洲av| 99热这里只有是精品50| 一夜夜www| 每晚都被弄得嗷嗷叫到高潮| 欧美另类亚洲清纯唯美| 久久精品综合一区二区三区| 免费无遮挡裸体视频| 日韩有码中文字幕| 午夜a级毛片| 中文字幕高清在线视频| 亚洲精华国产精华精| 成人国产一区最新在线观看| 久久久久精品国产欧美久久久| 黄色视频,在线免费观看| 久久精品91蜜桃| 91麻豆av在线| 国产一区二区亚洲精品在线观看| av福利片在线观看| e午夜精品久久久久久久| 亚洲,欧美精品.| 两性午夜刺激爽爽歪歪视频在线观看| 国产精品嫩草影院av在线观看 | av福利片在线观看| 国产视频内射| 黄片小视频在线播放| 国产精品乱码一区二三区的特点| 1024手机看黄色片| 国产一区二区在线观看日韩 | 中文字幕人妻丝袜一区二区| 久久久久国产精品人妻aⅴ院| 好男人在线观看高清免费视频| 男女下面进入的视频免费午夜| 久久久久久久久中文| a在线观看视频网站| 丁香欧美五月| 99精品在免费线老司机午夜| 中亚洲国语对白在线视频| 国产野战对白在线观看| 国产探花在线观看一区二区| 天天躁日日操中文字幕| 人人妻人人澡欧美一区二区| 国内精品久久久久精免费| 男女视频在线观看网站免费| 国产男靠女视频免费网站| 午夜精品一区二区三区免费看| 免费人成视频x8x8入口观看| 精品人妻1区二区| 真实男女啪啪啪动态图| 成人午夜高清在线视频| 亚洲av成人不卡在线观看播放网| 天堂影院成人在线观看| 69人妻影院| 嫩草影视91久久| 九色国产91popny在线| 久久久久久久精品吃奶| 嫩草影视91久久| 99热这里只有是精品50| 91在线精品国自产拍蜜月 | 成熟少妇高潮喷水视频| 精品久久久久久久毛片微露脸| 成年女人看的毛片在线观看| 亚洲久久久久久中文字幕| 极品教师在线免费播放| 日韩欧美 国产精品| 中文字幕人妻熟人妻熟丝袜美 | 欧美日韩黄片免| svipshipincom国产片| 国产精品精品国产色婷婷| 日韩欧美 国产精品| 中文字幕人妻熟人妻熟丝袜美 |