日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

JS高级语法与JS选择器

發布時間:2024/6/21 综合教程 32 生活家
生活随笔 收集整理的這篇文章主要介紹了 JS高级语法与JS选择器 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

元素(element)和節點(node)

childNode屬性和children屬性的區別

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
 <div id="parentDiv">
     <!--注釋-->
     <div></div>
 </div>
 <script>
     console.log(document.getElementById('parentDiv').childNodes); //NodeList[5]
     console.log(document.getElementById('parentDiv').children) ;  //HTMLCollection[1]
 </script>
</body>
</html>

childNodes屬性返回的是NodeList數組,是屬于節點(也包括元素)的屬性,而children屬性返回的是子元素,是屬于元素的屬性

而在Nodelist數組里面也有元素存在,證明了元素也是節點的一種,即元素節點。

W3C中的解釋是:

在 HTML DOM (文檔對象模型)中,每個部分都是節點

文檔本身是文檔節點
所有 HTML 元素是元素節點
所有 HTML 屬性是屬性節點
HTML 元素內的文本是文本節點 (包括回車符,空格,空白字符也是屬于文本節點)
注釋是注釋節點

Element 對象可以擁有類型為元素節點、文本節點、注釋節點的子節點。

NodeList 對象表示節點列表,比如 HTML 元素的子節點集合。

元素也可以擁有屬性。屬性是屬性節點。
總結:元素是元素節點,是節點中的一種,但元素節點中可以包含很多的節點

nodeName(純大寫) 屬性含有某個節點的名稱

元素節點的nodeName 是標簽名稱
屬性節點的nodeName 是屬性名稱
文本節點的nodeName 永遠是 #text
文檔節點的nodeName 永遠是 #document

nodeValue 對于文本節點,nodeValue 屬性包含文本。 對于屬性節點,nodeValue 屬性包含屬性值
nodeValue 屬性對于文檔節點和元素節點是不可用的 

nodeType 屬性可返回節點的類型

Element 元素     1
Attribute 屬性   2
Text 文本        3
CDATA Section CDATA斷     4
Entity Reference 實體參數  5
Entity 實體       6
Processing Instrucion 處理指令  7
Comment 注釋    8
Document 文檔    9
Document Type 文檔類型   10
Document Fragment 文檔片斷   11

添加和刪除節點(HTML 元素)

創建新的 HTML 元素

如需向 HTML DOM 添加新元素,您必須首先創建該元素(元素節點),然后向一個已存在的元素追加該元素

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<div id="div1">
    <p id="p1">這是一個段落</p>
    <p id="p2">這是另一個段落</p>
</div>

</body>
<script>
var para=document.createElement("p");

var node=document.createTextNode("這是新段落。");
para.appendChild(node);

var element=document.getElementById("div1");
element.appendChild(para);
</script>
</html>

<!-- 為這段代碼創建新的 <p> 元素:
var para=document.createElement("p");
此時檢查頁面可以看到div里面已經生成了<p>元素

如需向 <p> 元素添加文本,您必須首先創建文本節點。
這段代碼創建了一個文本節點:
var node=document.createTextNode("這是新段落。");
然后您必須向 <p> 元素追加這個文本節點:
para.appendChild(node);
最后您必須向一個已有的元素追加這個新元素。
這段代碼找到一個已有的元素:
var element=document.getElementById("div1");
這段代碼向這個已有的元素追加新元素:
element.appendChild(para); -->

刪除已有的 HTML 元素

如需刪除 HTML 元素,您必須首先獲得該元素的父元素

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<div id="div1">
<p id="p1">這是一個段落。</p>
<p id="p2">這是另一個段落。</p>
</div>
 
</body>
<script>
var parent=document.getElementById("div1");

var child=document.getElementById("p1");

parent.removeChild(child);
</script>
</html>

<!-- 例子解釋:
這個 HTML 文檔含有擁有兩個子節點(兩個 <p> 元素)的 <div> 元素:
<div id="div1">
<p id="p1">這是一個段落。</p>
<p id="p2">這是另一個段落。</p>
</div>

找到 id="div1" 的元素:
var parent=document.getElementById("div1");
找到 id="p1" 的 <p> 元素:
var child=document.getElementById("p1");

從父元素中刪除子元素:
parent.removeChild(child);

提示:如果能夠在不引用父元素的情況下刪除某個元素,就太好了。
不過很遺憾。DOM 需要清楚您需要刪除的元素,以及它的父元素。
這是常用的解決方案:
找到您希望刪除的子元素,然后使用其 parentNode 屬性來找到父元素:
var child=document.getElementById("p1");
child.parentNode.removeChild(child); -->

常用節點操作

1.節點查找
document.getElementById,document.getElementByTagName,document.getElementByName ,document.getElementByClassName
document.querySelector() 參數為選擇器
document.forms 選取頁面中的所有表單元素
2.增加節點
增加節點前必須先使用document.createElement()創建元素節點,參數為標簽名
m.appendChild(n) 為m元素在末尾添加n節點
m.insertBefore(k,n) 在m元素的k節點前添加n節點
3.刪除節點
m.removeChild(n)刪除m元素中的n節點
m.replaceChild(k,n)用n節點取代m元素中的k節點
4.復制節點
m.cloneChild() 復制m節點,并將復制出來的節點作為返回值
參數為true時,則將m元素的后代元素也一并復制。否則,僅復制m元素本身


節點屬性操作

節點(自身)屬性:
  
attributes - 節點(元素)的 屬性節點
nodeType – 節點類型
nodeValue – 節點值
nodeName – 節點名稱
innerHTML - 節點(元素)的文本值

1.節點屬性值選取
m.屬性名  (:駝峰形式 )     m.className
m[“屬性名”]      m.['className']

m.getAttribute(“屬性名”)  :加引號,html的形式       m.getAttribute("class")

2.節點屬性修改
前兩種選取方法時,直接賦值即可
m.setAttribute("屬性名",“值”)


3.創建屬性節點并設置屬性值
var info_node=document.createAttribute("info");//創建
info_node.value='123';//設置
sup1.setAttributeNode(info_node);//添加

4.復制節點
var body = document.querySelector('body');
true深拷貝,拷貝自身與內容, false淺拷貝,只拷貝自身標簽
var cl_body = body.cloneNode(true);
console.log(cl_body);


 
JS DOM節點(當前標簽和同級、父級、子級..之間的關系)
1. 通過頂層document節點獲取
    1) document.getElementById(elementId) //根據id獲得
    2) document.getElementsByName(elementName) //根據name獲得
    3) document.getElementsByTagName(tagName) //根據標簽名獲得
2、通過父節點獲取
    1) parentObj.firstChild //獲得第一個子節點
    2) parentObj.lastChild //獲得第二個子節點
    3) parentObj.childNodes //獲取作為指定對象直接后代的HTML元素和TextNode對象的集合
    4) parentObj.children //非標準dom集合,建議使用childNodes
    5) parentObj.getElementsByTagName(tagName) //獲得該標簽下標簽名為tagName的所有標簽
3、通過臨近節點獲取
    1) neighbourNode.previousSibling //獲得同級前一個標簽
    2) neighbourNode.nextSibling //獲得同級后一個標簽
4、通過子節點獲取
    1) childNode.parentNode //獲得父標簽

事件

onload:頁面加載完畢事件,只附屬于window對象
onclick:鼠標點擊時間
onmouseover:鼠標懸浮事件
onmouseout:鼠標移開事件

on事件綁定方式

document.onclick = function() {
console.log("文檔點擊");
}

on事件只能綁定一個方法,重復綁定保留最后一次綁定的方法

document.onclick = function() {
console.log("文檔點擊");
}

事件的移除

document.onclick = null;

非on事件綁定方式

document.addEventListener('click', function() {
console.log("點擊1");
})
document.addEventListener('click', function() { console.log("點擊2"); })

非on事件可以同時綁定多個方法,被綁定的方法依次被執行
addEventListener第三個參數(true|false)決定冒泡的方式

function fn () {}
document.addEventListener('click', fn);

事件的移除
document.removeEventListener('click', fn,false);

事件的三種綁定方式的思考

方法一:嵌入dom
把onclick綁定在標簽上
HTML元素行間事件(也可以叫HTMl事件處理程序),直接在html標簽里添加事件。
缺點:html和js代碼緊密耦合
<input id="btn1" type="button" onclick="test();" />
 
方法二:直接綁定
onclick的js綁定辦法

//把一個函數賦值給一個事件處理程序屬性。(這種方式也叫做Dom0級事件處理程序)
var btn1 = document.getElementById('btn1');
function abc() {
    alert('abc');
}
btn1.onclick = abc; //當點擊的時候執行abc這個函數,等價于 btn1.onclick=function abc(){alert('abc');}
//btn1.onclick = null; //去掉綁定的事件

方法三:事件監聽

 click的js綁定辦法(js的話推薦這種)
//通過“事件監聽”的方式來綁定事件(也叫Dom2級事件處理程序)

var btn2 = document.getElementById('btn2');
btn2.addEventListener('click', showMsg, false); //鼠標單擊的時候調用showMes這個函數  
function showMsg() {
    alert("事件監聽");
}
//btn2.removeEventListener('click', showMsg, false); //去除綁定


方法一
最原始的寫法:和html混合在一起寫,缺點是代碼高冗余,且無法添加多個事件處理函數如上文對事件的舉例則為典型的**html事件處理程序*寫法

方法二
dom0級:將html代碼和js代碼分離,且支持匿名函數,可以看到完美的改進了1的冗余缺憾,所有的事件相關操作都在js中完成

方法三
dom2級:ie使用attachEventListener其他非ie使用addEventListener,可以支持綁定多個事件,瞧吧,又一個缺憾被完美解決了~,而且dom2級還可以自定義事件流,下一篇會分析事件流模型

dom3級:對事件進行了更廣而全的分類,請自行查閱

實例運用一

</head>
<body>
    <div class="div"></div>
    <div class="div"></div>
</body>
<script>
    // js事件: 頁面標簽在滿足某種條件下可以完成指定功能的這種過程, 成之為事件
    // 某種條件: 如鼠標點擊標簽: 點擊事件 | 鼠標雙擊標簽: 雙擊事件 | 鍵盤按下: 鍵盤按下事件
    // 指定功能: 就是開發者根據實際需求完整相應的功能實現

    // 鉤子函數: 就是滿足某種條件被系統回調的函數(完成指定功能)

    // 點擊事件: 明確激活鉤子的條件 = 激活鉤子后改處理什么邏輯, 完成指定功能(函數)
    var div = document.querySelector(".div");  // 找到的是第一個.div
    div.onclick = function () {
        // alert(123)
        this.style.backgroundColor = "pink";
    }

    // 明確第一個及第二個
    var divs = document.querySelectorAll('.div');
    divs[1].ondblclick = function () {
        divs[0].style.backgroundColor = "yellow";
    }

</script>
</html>

實例運用二

復習并延伸
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>復習預習</title>
    <style>
        [key='value'] {
            color: #0f8209;
        }
    </style>
</head>
<body>
    <div class="ele" alert="OK">div div div</div>
</body>
<script>
    // 1.面向對象js
    // ES5
    // 普通的單一對象
    var obj = {
        // 普通對象的屬性
        key: "value",
        fn: function () {
            console.log("普通對象的方法")
        }
    };
    console.log(obj.key);
    console.log(obj["key"]);
    // 1.key的類型為字符串類型
    // 結論:
    //      js支持的標識符可以省略引號, 反之不可以省略
    //      不支持的標識符訪問方式: 不可以采用.語法,需要采用[]語法,eg:obj["background-color"]

    var obj1 = {
        "name": "obj1",
        // key有時候會出現js不能直接支持的標識符書寫方式
        // 需求: obj1用來描述頁面標簽的各種顏色
        color: "red",
        // "color": "red",
        "background-color": "yellow"
    }
    console.log(obj1.name);
    console.log(obj1["name"]);
    console.log(obj1.color);
    // obj1.background = 12;
    // color = 10;
    console.log(obj1["background-color"]);

    // 2. 對象可以任意添加或刪除屬性
    var obj2 = {
        name: "obj2"
    };
    console.log(obj2);
    // 刪除屬性
    delete obj2.name;
    console.log(obj2);
    // 添加屬性
    obj2.age = 8;
    console.log(obj2);

    // 拓展: 獲取的頁面元素就是標簽對象, 可以對其添加任意屬性
    var ele = document.querySelector('.ele');
    console.log(ele.info);  // 直接使用無值, 原因ele并沒有添加該屬性
    ele.info = "添加的屬性信息";  // 添加屬性
    console.log(ele.info);  // 添加屬性后就可以正常方式添加的屬性值
    delete ele.info;  // 刪除操作
    console.log(ele.info);  // 刪除后屬性又會消失

    // 構造函數
    function Perple(name, age) {
        this.name = name;
        this.age = age;
        this.fn = function () {
            console.log("fn")
        }
    }
    // 實例化對象
    var p = new Perple("張三", 18);
    p.fn();

    // ES6
    class Student {
        constructor (name, age) {
            this.name = name;
            this.age = age;
        }
        fn () {
            console.log("fn")
        }
    }
    var s = new Student("張三", 18);
    s.fn();

</script>
<script>
    // getElementById只能由document調用
    var ele = document.getElementsByClassName("ele")[0];
    console.log(ele);
    ele = document.querySelector(".ele");
    console.log(ele);
    ele = document.querySelectorAll(".ele")[0];
    console.log(ele);

    // 該添加屬性的方式只映射到js代碼中
    ele.index = 123;
    console.log(ele.index);

    // js如何操作元素(頁面標簽)的全局屬性, 映射到html代碼中
    ele = document.querySelector('[alert]');  // 通過全局屬性獲取元素
    console.log(ele);
    // 獲取全局屬性值
    var info = ele.getAttribute('alert');
    console.log(info);
    // 修改全局屬性值
    ele.setAttribute('alert', 'no ok');
    // 添加全局屬性值(映射到html代碼中) => 結合CSS來控制頁面標簽的樣式
    ele.setAttribute('key', 'value');

</script>
</html>

事件參數event

存放事件信息的回調參數

在觸發DOM上某個事件時,會產生一個事件對象event,這個對象包含著所有事件有關的信息(導致事件的元素、事件的類型、與特定事件相關的信息)
所有瀏覽器都支持Event對象,但支持方式不同
IE中的事件對象:window.event

阻止事件冒泡 

DOM中提供stopPropagation()方法,但IE不支持,使用event對象在事件函數中調用就行
IE中提供的是,cancelBubble屬性,默認為false,當它設置為true時,就是阻止事件冒泡,也是用event對象在事件函數中調用 
 
jQuery中提供了stopPropagation()方法來停止事件冒泡,當需要時,只需用用event對象來調用就行,即event.stopPropagation();

默認行為

阻止默認行為 
DOM中提供preventDefault()方法來取消事件默認行為,但是只有當cancelable屬性設置為true的事件,才可以使用preventDefault()來取消事件默認行為,使用event對象在事件函數中調用就行
IE中提供的是returnValue屬性,默認為true,當它設置為false時,就是取消事件默認行為,也是用event對象在事件函數中調用
jQuery中提供了preventDefault()方法來阻止元素的默認行為,只需要用event對象來調用就好,即event.preventDefault()
如果想同時對事件對象停止冒泡和默認行為,可以在事件處理函數中返回false。這是對事件對象同時調用stopPropagation()方法和preventDefault()方法的一種簡寫方式 

事件注意點

1、event代表事件的狀態,例如觸發event對象的元素、鼠標的位置及狀態、按下的鍵等等;
2、event對象只在事件發生的過程中才有效。
firefox里的event跟IE里的不同,IE里的是全局變量,隨時可用;
firefox里的要用參數引導才能用,是運行時的臨時變量

在IE/Opera中是window.event,在Firefox中是event;
而事件的對象,在IE中是window.event.srcElement,在Firefox中是event.target,Opera中兩者都可用

處理冒泡與默認事件

事件的冒泡:父子都具有點擊事件,不處理的話,點擊子級也會出發父級的點擊事件

如果提供了事件對象,則這是一個非IE瀏覽器
if ( e && e.stopPropagation )
因此它支持W3C的stopPropagation()方法
e.stopPropagation(); 
else
否則,我們需要使用IE的方式來取消事件冒泡 
window.event.cancelBubble = true;
return false;

處理冒泡實例

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>事件對象</title>
    <style>
        body {
            margin: 0;
        }
        .box {
            background-color: pink;
        }
        .sup {
             200px;
            height: 200px;
            background-color: red;
        }
        .sub {
             100px;
            height: 100px;
            background-color: orange;
        }
    </style>
</head>
<body>
    <div class="box">12345</div>

    <div class="sup">
        <div class="sub"></div>
    </div>

    <a >只想相應點擊事件</a>
</body>
<script>
    var box = document.querySelector('.box');
    // 事件的鉤子函數, 系統回調時傳遞了一個值, 該值為事件對象
    box.onclick = function (ev) {  // 回調函數
        console.log(ev)
        // 特殊按鍵 altKey | shiftKey | ctrlKey
        console.log(ev.altKey)
        // 鼠標的點擊點
        console.log(ev.clientX, ev.clientY)
    }
</script>
<script>
    var sup = document.querySelector('.sup');
    var sub = document.querySelector('.sub');

    // 事件默認有冒泡, 子級相應事件后,會將事件傳遞給父級,如果父級有相同事件,也會被激活, 最終傳遞給document
    sub.onclick = function (ev) {
        console.log(ev);
        // 取消冒泡, 當自身處理事件后, 該事件就處理完畢, 結束, 不再向上傳遞
        ev.cancelBubble = true;
        console.log("子級被點擊了")
    };
    sup.onclick = function () {
        console.log("父級被點擊了")
    };
    document.onclick = function () {
        console.log("文檔被點擊了")
    }
</script>
</html>

事件默認行為:當一個事件發生時瀏覽器自己會做的事情

如果提供了事件對象,則這是一個非IE瀏覽器 
if ( e && e.preventDefault ) 
阻止默認瀏覽器動作(W3C) 
e.preventDefault(); 
else
IE中阻止函數器默認動作的方式 
window.event.returnValue = false; 
return false;

既然return false 和 e.preventDefault()都是一樣的效果,那它們有區別嗎?當然有
僅僅是在HTML事件屬性 和 DOM0級事件處理方法中 才能通過返回 return false 的形式組織事件宿主的默認行為

處理默認事件實例

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>事件對象</title>
    <style>
        body {
            margin: 0;
        }
        .box {
            background-color: pink;
        }
        .sup {
             200px;
            height: 200px;
            background-color: red;
        }
        .sub {
             100px;
            height: 100px;
            background-color: orange;
        }
    </style>
</head>
<body>
    <div class="box">12345</div>

    <div class="sup">
        <div class="sub"></div>
    </div>

    <a >只想相應點擊事件</a>
</body>
<script>
    var box = document.querySelector('.box');
    // 事件的鉤子函數, 系統回調時傳遞了一個值, 該值為事件對象
    box.onclick = function (ev) {  // 回調函數
        console.log(ev)
        // 特殊按鍵 altKey | shiftKey | ctrlKey
        console.log(ev.altKey)
        // 鼠標的點擊點
        console.log(ev.clientX, ev.clientY)
    }
</script>
<script>
    // 默認事件
    var aBtn = document.querySelector('a');
    aBtn.onclick = function (ev) {
        ev.cancelBubble = true;
        console.log("a被點擊了");
        // 手動轉跳頁面
        open('https://www.oldboyedu.com', '_self');
        // a標簽默認會完成轉跳, 如果取消默認事件
        return false;
    }

</script>
</html>

再補充一些

默認操作 具體指的是什么呢?
(1)把單擊事件處理程序注冊到一個錨元素,而不是一個外層的<div>上,那么就要面對另外一個問題:當用戶單擊鏈接時,瀏覽器會加載一個新頁面。

(2)當用戶在編輯完表單后按下回車鍵時,會觸發表單的submit事件,在此事件發生后,表單提交才會真正發生。
這種行為與我們討論的事件處理程序不是同一個概念,它是單擊標簽元素的默認操作。

如果我們不希望執行這種默認操作,那么在事件對象上調用.stopPropagation()方法也無濟于事,因為默認操作不是在正常的事件傳播流中發生的
在這種情況下,處理方法有:

1、w3c的方法是e.preventDefault(),IE則是使用e.returnValue = false;
preventDefault它是事件對象(Event)的一個方法,作用是取消一個目標元素的默認行為。既然是說默認行為,當然是元素必須有默認行為才能被取消,如果元素本身就沒有默認行為,調用當然就無效了。什么元素有默認行為呢?如鏈接<a>,提交按鈕<input type=”submit”>等。當Event 對象的 cancelable為false時,表示沒有默認行為,這時即使有默認行為,調用preventDefault也是不會起作用的。
1 <a  id="testA" >caibaojian.com</a>

var a = document.getElementById("testA");
a.onclick =function(e){
    if(e.preventDefault){
        e.preventDefault();//
    }else{
        window.event.returnValue = false;//IE
     //注意:這個地方是無法用return false代替的 
     //return false只能取消元素
    }
}


2、return false;
javascript的return false只會阻止默認行為,而是用jQuery的話則既阻止默認行為又防止對象冒泡

常見事件

鼠標事件

var box = document.querySelector('.box');

1. 點擊事件
box.onclick = function () {
    console.log("單擊");
};
2. 雙擊事件(應用場景不廣)
box.ondblclick = function () {
    console.log("雙擊");
};
3. 鼠標右鍵
box.oncontextmenu = function () {
    console.log("右鍵了");
    return false;
};
4. 鼠標懸浮 | 移動 | 按下 | 抬起 | 離開
box.onmouseover = function () {
    console.log("懸浮");
};
box.onmousemove = function () {
    console.log("移動");
};
box.onmousedown = function () {
    console.log("按下");
};
box.onmouseup = function () {
    console.log("抬起");
};
box.onmouseout = function () {
    console.log("離開");
}

事件參數ev
ev.clientX:點擊點X坐標
ev.clientY:點擊點Y坐標

over | out VS enter | leave

總結:
1. 將子級與父級分開考慮, 大家都有各自的懸浮離開事件, 采用 over | out 組合
2. 將子級納入父級考慮范圍, 也就是只有父級去相應懸浮離開事件, 采用 enter | leave 組合
3. 單獨考慮一個盒子的懸浮離開事件, 兩套均可以

特性
從父級移至子級, 會觸發out事件, 緊接著觸發子級的over事件, 并可以冒泡給父級

從父級移至子級, leave事件并不會觸發, 它認為子級是屬于父級的一部分, enter事件, 也不會再次觸發

懸浮子級:
sub over => sup over  支持冒泡
sup enter => sub enter  不支持冒泡

鍵盤事件

鍵盤事件
onkeydown:鍵盤按下會觸發,長按持續觸發
onkeyup:鍵盤抬起

事件參數ev

ev.keyCode:按鍵編號
ev.altKey:alt特殊按鍵
ev.ctrlKey:ctrl特殊按鍵
ev.shiftKey:shift特殊按鍵


<head>
    <meta charset="UTF-8">
    <title>鍵盤事件</title>
    <style>
        .box {
             100px;
            height: 100px;
            background: orange;
            position: absolute;
            top: 0;
            left: 0;
        }
    </style>
</head>
<body>
    <div class="box"></div>
</body>
<script>
    // 鍵盤長按會一直觸發按下事件
    document.onkeydown = function (ev) {
        console.log(ev);
        // 按下的鍵盤編號
        console.log("按下", ev.keyCode);
        // console.log(ev.which);
    }
    document.onkeyup = function (ev) {
        console.log("抬起", ev.keyCode);
    }

    // 左上右下: 37-40
    var box = document.querySelector('.box');
    document.onkeydown = function (ev) {
        switch (ev.keyCode) {
            case 37:
                box.style.left = box.offsetLeft - 10 + 'px';
                break;
            case 38:
                box.style.top = box.offsetTop - 10 + 'px';
                break;
            case 39:
                box.style.left = box.offsetLeft + 10 + 'px';
                break;
            case 40:
                box.style.top = box.offsetTop + 10 + 'px';
                break;
        }
    }
</script>
</html>

表單事件

onfocus:獲取焦點
onblur:失去焦點
onselect:文本被選中
oninput:值改變
onchange:值改變,且需要在失去焦點后才能觸發
onsubmit:表單默認提交事件

文檔事件

文檔事件由window調用
onload:頁面加載完畢觸發
onbeforeunload:頁面退出或刷新警告,需要設置回調函數返回值,返回值隨意

圖片事件

onerror:圖片加載失敗

頁面事件

onscroll:頁面滾動
onresize:頁面尺寸調整
window.scrollY:頁面下滾距離

文檔頁面事件運用實例

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>其他事件</title>
    <script>
        // 當頁面加載完畢之后再回調
        window.onload = function () {
            var box = document.querySelector('.box');
            console.log(box);
        }

        // 頁面滾動可以設置給 window | document
        var isShow = false;
        window.onscroll = function () {
            console.log(window.scrollY);
            if (window.scrollY >= 1200) {
                if (!isShow) {
                    console.log("將返回Top按鈕顯示");
                    isShow = true;
                }
            } else  {
                if (isShow) {
                    isShow = false;
                }
            }
        }
    </script>
</head>
<body>
    <div class="box"></div>
    <br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
</body>

</html>

JS選擇器

getElement系列

通過id名獲取唯一滿足條件的頁面元素

document.getElementById('id名');
該方法只能由document調用
任何HTML元素可以有一個id屬性,在文檔中該值必須唯一
若瀏覽器中出現多個id名的情況,CSS樣式對所有該id名的元素都生效,但javascript腳本僅對第一個出現該id名的元素生效。
getElementById()該方法接收一個參數:要取得元素的id,若找到則返回該元素,若不存在則返回null
注意:document.getElementById方法的內部實現需要用到this,這個this本來被期望指向document

跨瀏覽器兼容
1:在ie7中,使用getElementById()的時候,接收的參數id不區分大小寫。
2:在表單元素中,如果表單設置有name屬性,其name屬性會被當做id識別出來。
3:id是唯一的,但name屬性并不是唯一的。具有該名稱的隱式全局變量會引用一個類數組對象,包括所有該命名的元素

通過class名獲取所有滿足條件的頁面元素

document.getElementsByClassName('class名');
該方法可以由document及任意頁面元素對象調用
document.getElementsByClass("class1
class2")可以拿到同時擁有class1和class2的元素,中間用空格隔開,不區分class1和class2的順序。

兼容性:IE8及其以下版本的瀏覽器未實現getElementsByClassName方法
返回值為HTMLCollection (一個類數組結果的對象,使用方式同數組)
沒有匹配到任何結果返回空HTMLCollection對象 ([]) 

通過name屬性獲取元素

getElementsByName(返回值是一個nodeList集合(區別于Array),可作用于Dom元素)
getElementsByName()方法接收一個參數,即要取得元素的name值。

document.getElementsByName("Name");Name為要獲取元素的name屬性值,這個方法一般適用于提交表單數據,當
元素為form、img、iframe、applet、embed、object的時候設置name屬性時,會自動在Document對象中創建以該
name屬性值命名的屬性。
所以可以通過document.domName引用相應的dom對象。

在ie9中,getElementsByName()只對表單元素起作用。
IE9-瀏覽器中使用getElementsByName()方法也會返回id屬性匹配的元素。因此,不要將name和id屬性設置為相同的值。

通過tag名獲取所有滿足條件的頁面元素

document.getElementsByTagName('tag名');
該方法可以由document及任意頁面元素對象調用
返回值為HTMLCollection (一個類數組結果的對象,使用方式同數組)
沒有匹配到任何結果返回空HTMLCollection對象 ([]) 
可以使用方括號語法或item()方法來訪問類數組對象中的項,length屬性表示對象中元素的數量。
[注意]通過getElementsByTagName()方法取得的類數組對象有一個namedItem()方法,可以通過元素的name屬性取得集合中的第一個值。safari和IE不支持該方法。document.getElementsByTagName("*")表示匹配文檔的所有元素

querySelect系列

獲取第一個匹配到的頁面元素

document.querySelector('css語法選擇器');
該方法可以由document及任意頁面對象調用 

獲取所有匹配到的頁面元素

document.querySelectorAll('css語法選擇器');
該方法可以由document及任意頁面對象調用
返回值為NodeList (一個類數組結果的對象,使用方式同數組)
沒有匹配到任何結果返回空NodeList對象 ([])

id名

可以通過id名直接獲取對應的頁面元素對象,但是不建議使用

js選擇器運用實例

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>js選擇器</title>
    <style>
        #d {
            color: red;
        }
    </style>
</head>
<body id="bd">
    <!--注釋-->
    <div id="d" class="dd">我是ddd111</div>
    <div id="d" class="dd">我是ddd222</div>

    <div class="sup1">
        <div id="div"></div>
    </div>
    <div class="sup2">
        <div id="div"></div>
    </div>
</body>
<script>
    // 節點(了解): 在文檔(document)中出現的所有內容都是document中的節點
    // 節點(node): 標簽節點(元素element) | 注釋節點 | 文本節點 | <!doctype>節點
    console.log([bd]) // 文本 注釋 文本 標簽 文本 標簽 文本 標簽 文本 標簽 文本
</script>
<script>
    // js選擇器: 將js與html建立起連接
    // js中一般稱標簽為頁面元素

    // 1.直接通過id名進行匹配
    console.log(d);  // 兩個都可以找到

    // 2.getElement系列(最嚴謹)
    // 所有顯示在頁面中的內容(展現給用戶看的), 都是屬于文檔(document)對象的內容, 存放在文檔中
    // console.log(document)
    // 獲取文檔中的標簽 => document對象通過.語法去獲取具體的目標標簽元素
    // ① id
    var div = document.getElementById('d');  // 檢索得到頁面中出現的第一個滿足條件的目標
    console.log(">>>", div);

    var body = document.getElementById("bd");
    console.log(body);

    // 注: getElementById該方法只能由document來調用
    // 原因: 我們需要保證一個文檔中一個id只能出現一次, document檢索的就是文檔,
    // 而某父級標簽只能檢索自身標簽內部區域, document可以保證文檔中只能一個id
    // 只出現一次,某父級標簽只能保證自身內部區域id不重復,能不能保證與外界不重復?
    // 不能, 所以從安全角度出發, 獲取唯一對象的getElementById方法只能由能確定唯一id的
    // 對象來調用, 能被document調用, 不能被sup來調用

    // ② 類名
    var divs = document.getElementsByClassName('dd');
    console.log(divs);
    // 兩個div在body之中, 上方已經獲取了body, 那能否通過body來獲取body中的div
    var divs1 = body.getElementsByClassName('dd');
    console.log(divs1);

    // ③ 標簽名
    var divs = document.getElementsByTagName('div');
    console.log(divs)

    console.log('--------------------------------------------------');

    // 3.querySelector系列(最方便)
    // 參數: 就是css選擇器語法
    // querySelector檢索第一個
    var div = document.querySelector('body > .dd');
    console.log(div);

    // querySelectorAll檢索所有滿足結果
    var divs = document.querySelectorAll('body > .dd');
    console.log(divs);
    var divs = body.querySelectorAll('.dd');
    console.log(divs)

    var divs = body.querySelectorAll('#d');  // 不嚴謹
    console.log(divs)


</script>
</html>

選擇器分類

1. ID選擇器

使用ID選擇器時,需在前面添加“#”,區分大小寫,語法如下:document.querySelector('#id'); //等同于document.getElementById('id')

2. 元素選擇器

元素選擇器通過指定的標簽查詢元素,此時querySelectorAll等同于getElementsByTagName,語法如下:document.querySelectorAll('a'); //獲取頁面上的所有a元素并返回元素

3. 樣式類選擇器

使用元素的樣式類獲取一個或一類元素,樣式名字前使用“.”(英文句號)開頭,語法如下:document.querySelectorAll('.btn'); //獲取所有樣式類中包含btn類名的元素

4. 分組選擇器

使用querySelectorAll不僅可以獲取一個或一類元素,還可以同時獲取其他類別元素,兩種類型之間使用逗號隔開,語法如下:document.querySelectorAll('a,p'); 
//獲取頁面上所有a元素和p元素,并通過一個列表返回document.querySelectorAll('.btn,.txt'); //獲取頁面上所有包含btn和txt樣式類名的元素

5. 屬性選擇器

獲取頁面上包含指定屬性的元素,屬性名稱可以是元素原生屬性和用戶自定義屬性,語法如下:document.querySelectorAll('a[target="_blank"]'); 
//獲取頁面上所有target屬性為_blank的a元素document.querySelectorAll('img[data-id]'); //獲取頁面上所有帶有自定義屬性data-id的img元素

6. 后代選擇器

主要用于選擇作為某元素后代的元素,規則左邊的選擇器一端包含兩個或多個用空格分隔的選擇器,如div a可以理解為查找所有被div包圍的所有a元素,語法如下:document.querySelectorAll('div a'); 
//獲取頁面上所有被div包含的a元素document.querySelectorAll('div .btn'); //獲取頁面上所有被div包含的帶有btn樣式類名的元素
 
7. 子元素選擇器

后代選擇器會將元素底下的所有相關元素都搜索出來,如果想進一步縮小范圍,可以使用子元素選擇器,只會選擇某個元素的一級子元素,子元素用“>”(大于號)表示,代碼如下:
<html>    <div id="first">        <div></div>        <div></div>    </div></html>     <script>    document.querySelectorAll('html>div'); //只返回一個id為first的div元素</script>
 
8. 相鄰兄弟選擇器(比較少用)

選擇緊接在另一個元素后的元素,而且兩者有相同的父元素,相鄰兄弟選擇器使用“+”(加號),代碼如下:
<div>    <div></div>    <div></div></div><p id="p1"></p><p id="p2"></p><script>    document.querySelectorAll('div+p'); 
//只返回一個id為p1的p元素</script>
 
9. 偽類選擇器

“:first-child”表示選擇元素的第一個子元素,“:last-child”表示選擇元素的最后一個子元素,“:nth-child(n)”表示選擇元素的第n個子元素?!?first-child”的使用例子,代碼如下:
<div>    <p id="p1"></p>    <p id="p2"></p></div> <script>    document.querySelectorAll('p:first-child'); //只返回一個id為p1的p元素</script>

閉包

function outer() {
var data = {}
function inner() {
return data;
}
return inner;
}

閉包目的:不允許提升變量作用域時,該函數的局部變量需要被其他函數使用
閉包本質:函數的嵌套,內層函數稱之為閉包
閉包的解決案例:①影響局部變量的生命周期,持久化局部變量;②解決變量污染

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>閉包</title>
</head>
<body>
閉包
</body>
<script>
    // 了解知識點
    // 閉包: 局部的函數(被一個函數包裹的函數)
    // 為什么使用閉包:
    // 1.一個函數要使用另一個函數的局部變量
    // 2.閉包會持久化包裹自身的函數的局部變量
    // 3.解決循環綁定

    // 函數的嵌套定義
    function outer() {
        var num = 10;
        function inner() {
            // 1.在inner函數中,使用了outer的局部變量num
            return num;
        }
        return inner;
    }
    var innerFn = outer();
    // 2.借助閉包,將局部變量num的生命周期提升了
    var num = innerFn();
    console.log(num);


</script>
</html>

循環綁定

.html文件

<ul>
<li>列表項</li>
<li>列表項</li>
<li>列表項</li>
</ul>

.js文件

var lis = document.querySelector('li');
for (var i = 0; i < lis.length; i++) {
lis[i].onclick = function () {
// 打印列表項的索引
console.log(i);
}
}

會發生變量污染

解決方法

1 獲取局部作用域解決 2 閉包解決 3 對象屬性解決

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>循環綁定</title>
</head>
<body>
<div class="box">0000000000000000001</div>
<div class="box">0000000000000000002</div>
<div class="box">0000000000000000003</div>
</body>
<script>
    var divs = document.querySelectorAll(".box");
    /* 存在污染
    for (var i = 0; i < divs.length; i++) {
        // i = 0 | 1 | 2 | 3
        // 循環綁定
        divs[i].onclick = function () {
            console.log("***", i)
        }
    }
    // i = 3
    console.log(">>>", i);
    */

    /* 利用塊級作用域解決
    for (let i = 0; i < divs.length; i++) {
        // {i=0 <= i} {i=1 <= i} {i=2 <= i}
        // i = 3
        // 循環綁定
        divs[i].onclick = function () {
            console.log("***", i)
        }
    } // for運行結束, i=3會被銷毀
    console.log(">>>", i)
    */

    // 利用標簽的屬性解決
    /*
    for (var i = 0; i < divs.length; i++) {
        divs[i].index = i;
        divs[i].onclick = function () {
            // console.log("###", i)
            console.log(this.index)
        }
    }
    */

    // 利用閉包處理循環綁定
    for (var i = 0; i < divs.length; i++) {
        (function () {
            var index = i;
            divs[index].onclick = function () {
                console.log("###", index)
            }
        })()
        /*
        (function (index) {
            divs[index].onclick = function () {
                console.log("###", index)
            }
        })(i)
         */
        /*
        (function (i) {
            divs[i].onclick = function () {
                console.log("###", i)
            }
        })(i)
         */
    }


</script>
</html>

面向對象JS

屬性與方法

var obj = {}; | var obj = new Object();

屬性

obj.prop = "";

方法

obj.func = function () {}

刪除屬性與方法

delete obj.prop
delete obj.func

屬性和方法實際使用

對象: 特征與行為的結合體, 是一個具象的實體

// js對象語法
var obj = {
// 屬性
name: 'Zero',
// 方法
teach: function () {
 console.log("教學");
}
};
// 對象使用屬性與方法, 采用.語法
console.log(obj.name);
obj.teach();

JS中中括號([ ])與 .

中括號運算符總是能代替點運算符。但點運算符卻不一定能全部代替中括號運算符
中括號運算符可以用字符串變量的內容作為屬性名。點運算符不能
中括號運算符可以用純數字為屬性名。點運算符不能
中括號運算符可以用js的關鍵字和保留字作為屬性名。點運算符不能

下面的例子中,a.b表示對象a的屬性b,既可以設置也可以讀取

object[key]=>key為常量時,object[key]等價于object.key,例如:a.b == a['b'] 

特殊的,object[key] 中key為變量時,只能用中括號形式

var a = {};
 // a.b = 1; 
a['b'] = 1; 
c = a.b; 
// c = a['b'];
alert(c);

標識符是否合法對兩種用法的影響

var obj = {}; 
// 為obj添加一個屬性name,name是合法的標識符,即也可以通過obj.name方式來定義

obj['name'] = 'jack'; 

// 為obj添加一個屬性2a,2a不是合法的標識符(不能以數字開頭),不能通過obj.2a來定義

obj['2a'] = 'test';

var obj = {name:'jack'};
obj['2a'] = 'test';
obj['name']; // --> jack 
obj['2a']; // --> test (不能通過obj.2a獲取)

總結:常量用點,變量就用中括號

運算符左側應當是一個表達式,它返回一個對象。
對于點(.)來說,右側必須是一個以屬性名稱命名的簡單標識符。
對于方括號([])來說,方括號里必須是一個計算結果為字符串的表達式,這個字符串就是屬性的名字

當通過點運算符(.)方法對象屬性時,屬性名用一個標識符來表示。標識符必須直接出現在js程序中,它們不是數據類型,因此程序無法修改它們。
反過來講,當通過[]來方式對象的屬性時,屬性名通過字符串表示。字符串是js的數據類型,在程序運行時可以修改和創建它們

<script type="text/javascript">
var addr = "";
for(i=0;i<4;i++){
addr += cutomer["address" + i] + "
";
}
</script>

這段代碼讀取customer對象的address0,adddress1,address2,adddress3屬性,并將他們連接起來

類字典結構使用

結構

var dict = {name: "zero", age: 18}

拓展

var dict = {"my-name": "zero", fn: function () {}, fun () {}}

使用

dict.name | dict["my-name"] | dict.fn()

構造函數(ES5)

// 構造函數: 聲明與普通函數一樣, 只是函數名采用大駝峰命名規則
function Person(name) {  // 類似于python中的類一樣來使用
   // 構造函數內部屬性方式不同于普通函數
   this.name = name;  // this代表Person構造函數實例化出的所有具體對象中的某一個
   this.teach = function () {
       console.log(this.name + "正在教學");
   }
}
// 如何使用構造函數中的屬性與方法
// 1. 通過構造函數實例化出具體對象
// 2. 通過對象.語法調用屬性與方法
var p1 = new Person("楊虎虎");  // name: 楊虎虎
var p2 = new Person("劉xx");  // name: 劉xx
console.log(p1.name);
console.log(p2.name);
p1.teach();
p2.teach();


為什么要用new?

new  會創建  pre 的對象,
但是沒有 new 的話就沒有沒有可返回的值或對象了,所以是  undefined。
如果不想new 新的對象的話,可以在 pre 的方法里 返回一個值或對象。
function pre(){
    this.radius = Math.random();
    return this.radius;
}

加 new 會把這個函數當作是一個構造器,返回一個對象。
不加的話,就是調用一個普通的函數,結果視函數返回值而定。 
有new,就返回對象,不管函數返回值如何。
無new,就看函數返回值。
構造函數最好返回 this 或者無返回值, 否則容易混淆。

類及繼承(ES6)

// ES6
// 引入了類
class Student {  // 類, 可以實例化對象, 但實例化出的對象需要加以區分
// 需要構造器(構造函數)來完成對象的聲明與初始化
// ES6規定方法的語法
constructor (name) {
   // 屬性在構造器中聲明并完成初始化
   this.name = name;
}
// 類中規定普通方法
study () {
   console.log(this.name + "正在學習");
}
// 類方法
static fn() {
console.log("我是類方法")
  }
}
// 1.實例化類的對象
let stu1 = new Student("嘿嘿");
// 2.使用屬性與方法
console.log(stu1.name);
stu1.study();

let stu2 = new Student("嘻嘻");
console.log(stu2.name);
stu2.study();

Student.fn()

<script>
// 類方法
class Tool { // 功能類(工具類)中的方法都定義為類方法
static max (num1, num2) {
return num1 > num2 ? num1 : num2;
}
}
// 通過Tool類來求兩個數中的大值, 需要Tool類的對象出現嗎? 不需要 => 功能有類直接使用
console.log(Tool.max(666, 888));


// throw "自定義異常";
// console.log("上面如果出現了異常, 邏輯將會被強制停止");
// var num = 10 / 0;
// console.log(num)
</script>

 

總結

以上是生活随笔為你收集整理的JS高级语法与JS选择器的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

超碰在线人人 | 久久精品一区八戒影视 | 人人爽久久涩噜噜噜网站 | 久久精品一区二区三区视频 | 欧美日韩在线观看视频 | 97电影手机版 | 中文字幕一区二区在线观看 | 亚洲天堂精品视频在线观看 | 97夜夜澡人人爽人人免费 | av超碰免费在线 | 久久久69 | 综合久久综合久久 | 黄色.com| 国产剧情一区二区在线观看 | 精品国产乱码久久久久久浪潮 | 亚洲精品视频在线播放 | 国产96视频 | 婷婷在线视频 | 日韩在线高清免费视频 | 一区二区三高清 | 亚洲 欧美 成人 | 亚洲第一av在线播放 | 亚洲视频在线免费观看 | 欧美日韩免费观看一区二区三区 | 在线国产精品视频 | 国产精品一区二区 91 | 中文字幕丝袜制服 | 日韩精品中文字幕在线 | 韩国av免费在线 | 嫩模bbw搡bbbb搡bbbb | 成人播放器 | 国产又粗又猛又色又黄网站 | 蜜臀av一区 | 日韩精品中文字幕在线不卡尤物 | 久久久精品欧美一区二区免费 | 国产精品热视频 | 精品99999 | 久草网在线 | 国产精品精品久久久 | 91视频亚洲 | 97精品国自产拍在线观看 | 亚洲第一区精品 | 午夜在线看片 | 69亚洲精品 | 成人欧美一区二区三区在线观看 | 日韩精品一区二区三区免费观看 | a级免费观看| 久草久热| 免费在线观看毛片网站 | 九九久久视频 | 免费看十八岁美女 | 九九免费精品 | 在线精品一区二区 | 亚洲精品男人天堂 | 久久国产露脸精品国产 | 婷婷 中文字幕 | 在线国产激情视频 | 久久69av| 亚洲国产中文字幕在线观看 | 丁香六月婷 | 成人av网页 | 国产人成在线视频 | 91成人精品国产刺激国语对白 | 四虎国产精品免费 | 99r精品视频在线观看 | 天天射综合网视频 | 丁香五香天综合情 | 五月婷婷六月综合 | www.91国产 | 美女视频是黄的免费观看 | 日本中文字幕观看 | 成人在线免费看 | 久久久久欧美精品 | 一级a性色生活片久久毛片波多野 | 日韩伦理片一区二区三区 | 成av在线| 欧美成人猛片 | 国产精品视频 | 久操视频在线播放 | 二区三区精品 | 日韩在线精品一区 | 天天干天天插 | 久久xx视频 | 免费在线观看日韩 | 在线视频观看亚洲 | 成人毛片100免费观看 | www色com| 久久不色 | 久草视频中文在线 | 深爱激情开心 | 成人免费观看视频网站 | 精品一区二区精品 | 国内视频| 国产高清精品在线 | 中文字幕在线观看网址 | 四虎永久视频 | 日本女人的性生活视频 | 国产黄色免费看 | 日日干夜夜爱 | a色视频| 在线免费观看涩涩 | 日韩黄色中文字幕 | 成人av一区二区三区 | 欧美日韩精品在线一区二区 | 成人av一区二区兰花在线播放 | 亚洲干| 亚洲成aⅴ人片久久青草影院 | 特黄色大片 | 韩日三级av| 国产自在线 | 97超碰资源站 | 国产高清小视频 | 四虎影视欧美 | 中文字幕高清av | 成年人黄色免费网站 | 精品国产激情 | 国产精品av久久久久久无 | 91色偷偷 | 久热免费在线 | 久久久久美女 | 久久久久一区二区三区四区 | 99视频偷窥在线精品国自产拍 | 久久精品精品 | 在线观看日本韩国电影 | 欧美一级片在线 | 午夜精品久久久久久久99热影院 | 久久涩视频 | 国产精品v欧美精品v日韩 | 色综合久久久久久久久五月 | 综合网在线视频 | 欧美久久综合 | 91精品视频免费观看 | 免费亚洲视频 | 97国产精品一区二区 | 日日干干夜夜 | 日日躁夜夜躁aaaaxxxx | www黄com| 人人爱人人做人人爽 | 久久免费一 | 一级精品视频在线观看宜春院 | 国产不卡精品视频 | 日日夜夜精品 | 亚洲最新视频在线 | 国产精品免费小视频 | 久久综合色播五月 | 最新中文字幕视频 | 狠狠操夜夜操 | 成人午夜电影网站 | 午夜精品影院 | 精品毛片在线 | 亚洲国产精品传媒在线观看 | 日韩视频在线不卡 | 欧美日本日韩aⅴ在线视频 插插插色综合 | 精品久久久久久久久亚洲 | 最新中文在线视频 | 国产直播av | 2022久久国产露脸精品国产 | 18岁免费看片| 成人在线观看av | 中文字幕影片免费在线观看 | 中文区中文字幕免费看 | 婷婷国产在线观看 | 玖玖在线资源 | 亚洲成a人片综合在线 | 精品一区二区三区香蕉蜜桃 | 日本激情动作片免费看 | 手机看片| 午夜少妇一区二区三区 | 欧美久久99| av高清影院 | 2019中文在线观看 | 欧美日韩在线观看一区二区 | 欧美日韩国产一区 | 麻豆91小视频 | 欧美精品在线观看一区 | 99精品国产在热久久下载 | 91久久丝袜国产露脸动漫 | 天天插伊人 | 中文字幕91视频 | 亚洲区另类春色综合小说校园片 | 国产精品久久久久av | 美女一级毛片视频 | 亚洲精品综合一区二区 | 黄色av网站在线观看免费 | 欧美午夜精品久久久久 | 亚洲乱码国产乱码精品天美传媒 | 免费男女羞羞的视频网站中文字幕 | 亚洲视频精品在线 | 91最新视频在线观看 | 在线观看91视频 | 黄色www免费 | av在线免费观看网站 | 亚洲欧洲xxxx | 亚洲一区视频免费观看 | 亚洲国产精彩中文乱码av | 人人草在线视频 | 91福利社区在线观看 | 91视频黄色 | 欧美日韩另类在线观看 | 国内精品久久久久影院日本资源 | 在线观看av免费 | 免费99| 成人一区在线观看 | 亚洲视频 在线观看 | 九9热这里真品2 | 国产成人99av超碰超爽 | 精品久久国产一区 | 激情视频一区二区 | 久久精品美女 | 国产视频2区 | 精品色999 | 国产精品久久久久久久妇 | 韩日精品在线观看 | 久久视频免费看 | 国产主播大尺度精品福利免费 | 免费av大全 | 国产精品久久嫩一区二区免费 | 99国产一区二区三精品乱码 | 国产精品欧美一区二区三区不卡 | 日韩在线资源 | 久草剧场| 在线观看日韩中文字幕 | 欧美成人亚洲成人 | 欧美人体xx | 天天综合网 天天综合色 | 最新久久免费视频 | 超碰97中文| 亚洲欧洲成人精品av97 | 99精品在这里 | 九九精品在线观看 | 亚洲免费观看在线视频 | 夜夜爽天天爽 | 亚洲精品美女久久久久网站 | 日韩精品一区不卡 | 婷婷六月综合亚洲 | 18国产精品白浆在线观看免费 | 97在线影视 | 国产理论免费 | 国产在线 一区二区三区 | 欧洲成人免费 | 免费a网址 | 九九久久影院 | 午夜婷婷网 | 免费日韩在线 | 色五月成人 | 黄色成人小视频 | 91视频传媒 | 亚洲经典中文字幕 | 午夜久久久久久久 | 国内精品免费久久影院 | 超碰在线人人艹 | 久草在线视频免费资源观看 | 国产精品久久久久久久婷婷 | 人人看黄色| 久久99久久99精品免观看软件 | 成人三级黄色 | 九色福利视频 | 人人插人人插 | 国产黄在线看 | 日日碰狠狠添天天爽超碰97久久 | 中文字幕在线中文 | 激情视频区 | 精品视频免费在线 | 国产精品久99 | 蜜臀av性久久久久蜜臀aⅴ流畅 | 久草在线最新 | 国产精品成人一区二区三区吃奶 | 亚洲四虎影院 | 日韩美女高潮 | 在线观看日韩专区 | 久久成人高清视频 | 在线免费观看麻豆视频 | 亚洲伊人婷婷 | 日韩在线免费电影 | 激情 一区二区 | 久草久草在线观看 | 密桃av在线| 在线观看免费色 | 一级一片免费视频 | 午夜在线免费视频 | 亚洲自拍av在线 | 91精品国产成人观看 | 黄污视频大全 | 久草在线最新 | 久久久久9999亚洲精品 | 国产精品一区二区久久久 | 久久精品久久国产 | 香蕉在线影院 | 91成人免费电影 | 天天av在线播放 | 黄色日批网站 | 久久久99国产精品免费 | 成x99人av在线www | 欧美最猛性xxxxx免费 | 亚洲精品在线播放视频 | 亚洲一级黄色 | 日本一区二区不卡高清 | 日韩色综合网 | 成人sm另类专区 | 亚洲国产精品99久久久久久久久 | 国产精品欧美激情在线观看 | 日韩视频免费在线观看 | 亚洲在线精品视频 | 成年人免费看 | 婷婷国产在线 | 国产一区二区三区免费视频 | 国产日产av | 懂色av一区二区在线播放 | 色综合久 | 在线观看视频国产 | 日日碰狠狠躁久久躁综合网 | 久久精品之 | 91久久久久久国产精品 | 人人超碰在线 | 五月花丁香婷婷 | 91精品国产99久久久久 | 黄色特级一级片 | 亚洲激情中文 | 久久欧美精品 | 精品999国产 | adn—256中文在线观看 | 园产精品久久久久久久7电影 | av大全免费在线观看 | 美女视频免费一区二区 | 色综合天天狠狠 | 欧美日韩在线观看一区二区三区 | 国产精品日韩高清 | 亚洲精选久久 | 亚洲精品在线免费播放 | 三级av在线播放 | 中文字幕乱在线伦视频中文字幕乱码在线 | 亚洲第一成网站 | 一区二区三区韩国免费中文网站 | 欧美日韩国产精品一区二区亚洲 | 免费看污片 | 四虎在线观看视频 | 99久久久免费视频 | 91综合色| 亚洲国产精品一区二区尤物区 | 免费网站观看www在线观看 | 色瓜 | 超碰免费av | 国产真实精品久久二三区 | 日韩精品久久中文字幕 | 色99导航| 2023av在线| 黄色影院在线播放 | 成人av中文字幕 | 日韩一区二区三免费高清在线观看 | 久久99在线视频 | 成年人免费电影在线观看 | 午夜精品久久久久久中宇69 | 丁香婷婷激情国产高清秒播 | av三区在线 | 免费一级片视频 | 国产精品久久久久久久免费 | 91精品视频免费 | 91麻豆精品国产91久久久无限制版 | 亚洲最大在线视频 | 18久久久久 | 91av国产视频 | 亚洲天堂精品视频 | 一区国产精品 | 四虎影视成人永久免费观看亚洲欧美 | 久久精品免视看 | 久久久久久久综合色一本 | 中文字幕日本在线 | 亚洲天堂网站 | 人人爽人人爽人人爽学生一级 | 91麻豆精品国产91久久久无限制版 | 97超碰网 | 免费毛片aaaaaa | 在线观看www.| 97国产人人| 日韩精品无码一区二区三区 | 成人av在线网址 | www.伊人网 | 久久精品福利 | 国产999| 色偷偷888欧美精品久久久 | 香蕉在线观看 | av免费电影网站 | 2018好看的中文在线观看 | 精品国产电影一区 | 久久精品com | 天天操天天干天天干 | 婷婷网五月天 | 亚洲高清在线观看视频 | 奇米网8888 | 亚洲欧美视频 | 久久综合偷偷噜噜噜色 | 五月婷网站 | 狠狠色噜噜狠狠狠狠2021天天 | 国产日韩视频在线播放 | 成人香蕉视频 | 日韩中文字幕免费电影 | 丝袜美女在线 | 免费a视频在线观看 | 手机在线日韩视频 | 日本精品一区二区三区在线观看 | 国产理论在线 | 亚洲一区精品二人人爽久久 | 日韩黄在线观看 | www.狠狠操 | 91在线观看视频 | 中文字幕在线高清 | 992tv在线成人免费观看 | av在线播放网址 | 久久人人爽人人片av | 91精品久久久久久 | 一区在线观看 | 毛片激情永久免费 | 国产视频在线免费观看 | 国产精品999久久久 久产久精国产品 | 免费欧美 | 亚洲六月丁香色婷婷综合久久 | 在线观看视频日韩 | 在线观看www. | 国产特级毛片aaaaaa高清 | 久久久久免费观看 | 天天色天天上天天操 | 激情五月综合 | 免费高清男女打扑克视频 | 国产成人精品久久二区二区 | 久久久久免费精品国产 | 日色在线视频 | 黄色中文字幕 | 久久高清免费视频 | 久久av电影 | 在线观看一级片 | 国产伦理精品一区二区 | 美女网站色免费 | 久久国产精品一二三区 | 精品在线免费观看 | 国产999精品视频 | 蜜臀精品久久久久久蜜臀 | 国产精品18久久久久久vr | 国产啊v在线 | 亚洲午夜精品久久久久久久久 | 2019中文最近的2019中文在线 | 精品亚洲va在线va天堂资源站 | 在线国产小视频 | 日韩精品免费一线在线观看 | 九九99 | 色噜噜狠狠狠狠色综合久不 | 色综合久久久久 | www久| 亚洲在线视频免费 | 伊人色综合久久天天 | ,午夜性刺激免费看视频 | 亚洲第一成网站 | av成人在线看 | 在线看污网站 | 国产你懂的在线 | 日韩欧美在线视频一区二区 | 玖玖在线视频观看 | 日韩av免费在线电影 | 久久久精品国产一区二区 | av在线播放国产 | 久久99精品久久久久久三级 | 日韩在线一二三区 | 久久综合福利 | 久久99精品国产麻豆宅宅 | 99久久精品一区二区成人 | 色91av| 国产97超碰 | 欧美在线观看视频免费 | 色在线视频网 | 中文字幕在线观看网址 | 伊人伊成久久人综合网小说 | 丁香六月激情婷婷 | 一区视频在线 | 日韩在线免费电影 | 免费看污黄网站 | 久久成电影 | 9999免费视频 | 国产乱码精品一区二区蜜臀 | 人人射网站 | 午夜精品一区二区国产 | 91麻豆精品国产91久久久使用方法 | 成人97视频一区二区 | 天天操·夜夜操 | 99re在线视频观看 | 成人久久久电影 | 91九色国产在线 | 99精品视频一区二区 | 亚洲一区二区三区精品在线观看 | 中文在线免费观看 | 国内丰满少妇猛烈精品播 | 九九在线精品视频 | 最新日韩视频 | 2018亚洲男人天堂 | 国产糖心vlog在线观看 | 日韩av进入 | av片中文 | 91九色视频在线 | 国产一区二区在线影院 | 少妇bbw搡bbbb搡bbbb | 久久久久久久久爱 | 在线观看免费版高清版 | 亚洲 欧美 日韩 综合 | 久操视频在线播放 | 狠狠色丁婷婷日日 | 午夜精品导航 | 欧美在线视频免费 | 五月综合久久 | 久久9精品| 综合久久综合久久 | 久久久久北条麻妃免费看 | 亚洲精品456在线播放第一页 | 天天干天天干天天色 | 久久夜夜爽 | 97人人超碰在线 | 国产免费中文字幕 | 久久av观看 | 成人av片免费看 | 久久99深爱久久99精品 | 午夜手机电影 | 99国产在线 | 91精品网站在线观看 | 国产一区二区不卡在线 | 久草在线精品观看 | 亚洲精品在线视频播放 | 一区二区三区在线观看免费视频 | 成人av免费在线播放 | 国产色视频一区二区三区qq号 | 日韩字幕| 日韩大片免费观看 | 亚洲免费精品一区二区 | 成人av在线影视 | 久久亚洲成人网 | 狠狠干成人综合网 | 亚洲国产美女精品久久久久∴ | 欧美性色综合网 | 亚洲一级在线观看 | 激情视频免费在线 | 国产手机av在线 | 亚州精品天堂中文字幕 | 亚洲成熟女人毛片在线 | 精品天堂av| 国产午夜精品视频 | 亚洲专区在线 | 在线播放亚洲 | 欧美日韩高清一区 | 日韩欧美视频一区 | 色www免费视频 | 天天摸天天操天天爽 | 久久精品超碰 | 国产精品欧美久久久久三级 | 国产在线观看91 | 青草视频在线免费 | 中文字幕视频网站 | 久久好看免费视频 | 九九热在线精品视频 | 又黄又爽又刺激 | 国产伦精品一区二区三区高清 | 日日爽天天爽 | 2019天天干天天色 | 日韩精品久久久久久中文字幕8 | 国产中文字幕av | 天堂av在线 | 中文字幕黄色网 | www视频在线播放 | 大型av综合网站 | 精品久久久久久亚洲综合网 | 操操操日日 | 91在线播放国产 | 国产精品成人a免费观看 | 国产成人99av超碰超爽 | 婷婷爱五月天 | 欧美精品中文 | 91丨精品丨蝌蚪丨白丝jk | 97精品国产97久久久久久免费 | 92国产精品久久久久首页 | 婷婷精品国产一区二区三区日韩 | 成人啪啪18免费游戏链接 | 亚洲人成网站精品片在线观看 | 美女网站在线观看 | 久久综合精品一区 | 黄色小网站在线观看 | 视频国产 | 中文字幕你懂的 | 国产资源免费在线观看 | 黄网站app在线观看免费视频 | 五月天婷婷丁香花 | 亚洲视频播放 | 久久综合狠狠综合久久激情 | 久久精品99国产精品酒店日本 | 麻豆久久久久久久 | 国产99在线免费 | 久草爱| 免费视频一级片 | 手机av在线网站 | 黄色成人小视频 | 色视频成人在线观看免 | 亚州精品在线视频 | 欧美激情另类文学 | 天天干天天拍天天操 | 精品久久一区二区三区 | 在线观看a视频 | 久久影视中文字幕 | 四川bbb搡bbb爽爽视频 | 国内视频| 人人澡人 | 91精品一区二区三区蜜臀 | av福利在线免费观看 | 奇米网777 | 久草网站 | 99视频在线看 | 日韩欧美网站 | 91视频中文字幕 | 91试看| 国产高清久久 | www视频免费在线观看 | 六月激情网 | 日日久视频 | 久久91久久久久麻豆精品 | 日本高清久久久 | 91亚色视频在线观看 | 久久综合给合久久狠狠色 | www麻豆视频| 亚洲免费精品一区二区 | 密桃av在线 | 狠狠插狠狠操 | 成人国产一区 | 日韩精品免费一区二区 | 欧美日韩中字 | 国产精品av在线免费观看 | 色婷婷国产精品一区在线观看 | 午夜视频免费 | www.亚洲精品| www成人av | 丝袜护士aⅴ在线白丝护士 天天综合精品 | sesese图片| 天天综合网~永久入口 | 在线观看mv的中文字幕网站 | 亚洲国产日韩在线 | 国产欧美日韩一区 | 国产精品亚洲精品 | 嫩模bbw搡bbbb搡bbbb | 欧美精品一区二区免费 | 麻豆91在线看 | 免费h漫在线观看 | 最近中文字幕免费av | 美女视频黄色免费 | 一区二区三区日韩精品 | 九九热视频在线 | 国产精成人品免费观看 | 中文字幕麻豆 | 久草在线 | 激情 婷婷 | av福利免费 | 亚洲视频免费在线 | 欧美日韩精品区 | 日韩在线播放视频 | 婷婷丁香激情综合 | 天天色成人网 | 亚洲午夜久久久久久久久 | 久久大片 | 国产精品毛片久久久久久久 | 日韩免费专区 | 日韩aⅴ视频 | 97成人在线观看 | 99热国产在线 | 成年人视频免费在线播放 | 美女又爽又黄 | 国产特级毛片aaaaaa毛片 | 精品久久久久久久久亚洲 | 婷香五月 | 国产一区网 | 日韩视频在线观看免费 | 99r国产精品 | 国产精品免费久久久 | 欧美性生活免费 | 国产中文欧美日韩在线 | 一二区av | 中文字幕欧美日韩va免费视频 | 天天草网站 | 丁香九月激情 | 97免费在线视频 | 欧美日韩精品在线观看 | 亚洲高清免费在线 | 高清av免费一区中文字幕 | 国产 日韩 在线 亚洲 字幕 中文 | 天天色天天爱天天射综合 | 中文字幕在线影院 | 亚洲女同ⅹxx女同tv | 天天草天天插 | 国产又粗又猛又色又黄视频 | a天堂最新版中文在线地址 久久99久久精品国产 | 超碰人在线| 黄色毛片一级 | 色婷婷视频 | 久草五月 | 亚洲资源视频 | 香蕉视频18 | 91综合视频在线观看 | 久久精品99精品国产香蕉 | 欧美一区二区三区免费观看 | 日韩欧美在线免费 | 热久久影视 | 亚洲精品成人av在线 | 国产精品久久久久久久久久久久午夜 | 精品在线99| 国产破处在线视频 | 久久久久北条麻妃免费看 | 国产日产精品一区二区三区四区的观看方式 | 国产成人免费高清 | 精品国产91亚洲一区二区三区www | 狠狠操操| 精品一二区 | 国产又粗又猛又黄又爽视频 | 亚洲一级片在线看 | 日韩国产高清在线 | 欧美日韩免费观看一区=区三区 | 久久精品视频18 | 久久影院精品 | 国产精品美女久久久久久久久久久 | 国产麻豆果冻传媒在线观看 | 中文字幕在线色 | 亚洲一级电影 | 国产视频在线观看一区 | 亚洲综合在线视频 | 国产欧美精品一区二区三区 | 国产在线一区二区 | 免费网站看av片 | 久久久成人精品 | 久久免费精品视频 | 国产一区成人在线 | 免费日韩精品 | 久久一区国产 | 免费a v观看 | 国产精品大片免费观看 | 日本公妇在线观看 | 日韩网站在线 | 日日操夜夜操狠狠操 | 99在线高清视频在线播放 | 亚洲人毛片 | 天天躁日日躁狠狠 | 亚洲日本一区二区在线 | 精品国产欧美一区二区 | 最近日本韩国中文字幕 | 亚洲国产精品一区二区久久,亚洲午夜 | 精品国模一区二区三区 | av3级在线 | 国内精品久久久久久久久久清纯 | 天天操综合网站 | 中文字幕成人一区 | 亚洲视频一 | 国产精品亚洲片在线播放 | 在线观看国产成人av片 | 久久一久久 | 久久精品福利视频 | 在线视频电影 | 欧美性做爰猛烈叫床潮 | 成人a视频片观看免费 | 日韩av不卡在线播放 | 国产精品入口久久 | 97干com | 天天曰| 日本在线视频网址 | 深爱五月网 | 日韩av一区二区在线播放 | 亚洲资源 | 又黄又爽的免费高潮视频 | 韩国av免费观看 | 极品久久久久久久 | 日韩一区二区三 | 久久刺激视频 | 免费看黄色91 | 成人在线观看你懂的 | 在线精品视频在线观看高清 | 黄色av在| 精品主播网红福利资源观看 | 成人午夜免费剧场 | 在线视频亚洲 | 美女网站黄在线观看 | 亚洲精品美女在线 | 2018亚洲男人天堂 | 中文字幕免费久久 | 欧美精品三级 | 亚洲视频 中文字幕 | 日韩一级黄色av | 久久成人免费 | 九九热re | 亚洲精品乱码久久久久久蜜桃不爽 | 国产精品二区三区 | 欧美日韩在线播放一区 | 九九热精| 久草国产在线观看 | 一区二区三区精品久久久 | 亚洲国产精品成人av | 91热精品视频| 国产精品亚洲片在线播放 | 五月在线| 色91av | 五月婷av | 日韩免费一区 | 婷婷视频在线播放 | 日韩欧美视频一区二区三区 | 色老板在线 | 国外成人在线视频网站 | 国产黄在线观看 | 午夜私人影院久久久久 | 99视频在线看 | 欧美淫aaa免费观看 日韩激情免费视频 | 成人毛片a| 在线观看视频色 | 欧美精品网站 | 久久国产精品99久久久久久进口 | 免费观看的av网站 | 亚洲乱码精品久久久久 | 久久综合中文字幕 | 91久久精品日日躁夜夜躁国产 | 中文字幕在线观看2018 | 超碰人人99 | 中文字幕在线观看视频一区 | 日韩精品中文字幕在线观看 | 92国产精品久久久久首页 | 亚洲欧美日韩精品久久奇米一区 | 日韩精品久久久久 | 91在线影视 | 亚洲激情 欧美激情 | 久久精品艹| 亚州黄色一级 | 欧美一级欧美一级 | 国产视频二| 成年人黄色大片在线 | 亚洲人久久| 国产成人精品久久 | 久久少妇av | 欧美极度另类 | 一级黄色片在线观看 | 人人超在线公开视频 | 国产在线理论片 | 亚洲成年片 | 午夜精品一区二区三区可下载 | 在线视频久 | 中文字幕精品三级久久久 | 天天干婷婷 | 国产中文字幕视频 | 国产日韩欧美在线观看 | 人人添人人 | 91网页版免费观看 | 欧美综合在线视频 | 成 人 黄 色 视频 免费观看 | 又黄又网站 | 国产黄色免费观看 | 亚洲免费观看在线视频 | 激情视频免费在线观看 | 亚洲精品午夜久久久久久久久久久 | 色999视频| 韩国一区在线 | 色操插 | 日韩毛片一区 | av一级网站 | 日韩成人免费在线 | 99在线精品免费视频九九视 | 精品91在线 | av中文字幕剧情 | 色婷婷综合久久久 | 天堂av免费观看 | 免费看一级| 亚洲国产精品成人精品 | 中文字幕一区二区三区久久蜜桃 | 日韩免费三区 | 狠狠色丁香九九婷婷综合五月 | 午夜av大片| 激情五月网站 | 狠狠操天天射 | 黄色毛片视频免费观看中文 | 亚洲综合狠狠干 | 91九色蝌蚪视频网站 | 精品少妇一区二区三区在线 | 国产一级二级在线播放 | 亚洲精品一区二区久 | 一区二区三区高清在线观看 | 337p日本大胆噜噜噜噜 | 日韩在线观看不卡 | 色综合狠狠干 | 最新av在线免费观看 | 国产亚洲综合精品 | 亚洲精品视频在线播放 | 少妇精品久久久一区二区免费 | 日韩极品在线 | 日韩在线观看第一页 | 久久久久亚洲精品中文字幕 | 国产成人在线精品 | 久久毛片网 | 天天综合久久 | 国产亚洲成av人片在线观看桃 | 久久综合九色综合欧美狠狠 | 2023亚洲精品国偷拍自产在线 | www.国产在线| 色在线视频 | 国产精品女人久久久久久 | 日本成人免费在线观看 | 天天天综合网 | 国产精品免费在线 | 在线观看黄网 | 婷婷丁香综合 | 日操干 | 久久99视频 | 国产资源在线视频 | 综合网五月天 | 四虎成人精品在永久免费 | 婷婷久月 | 日本午夜在线亚洲.国产 | 五月开心综合 | 在线看毛片网站 | 91精品久久久久久综合乱菊 | 国内精品久久久久影院优 | 美女黄网久久 | 国产精品午夜久久久久久99热 | 六月丁香激情综合 | 日本久久影视 | 国产精品视频地址 | 欧美日韩性 | 97在线观看免费高清 | 天天操夜夜拍 | 欧美狠狠色 | 午夜精品久久久久久中宇69 | 免费观看丰满少妇做爰 | 久久福利小视频 | 在线免费观看黄色小说 | 欧美成年人在线观看 | 色婷婷午夜 | 国产精品一区二区在线 | 日韩高清在线一区二区 | 国产香蕉97碰碰碰视频在线观看 | 国产三级视频在线 | 婷婷五天天在线视频 | 国产亚洲在线视频 | 久久精品亚洲精品国产欧美 | 国产亚洲欧美精品久久久久久 | 91精品成人久久 | 亚洲一区日韩在线 | 久碰视频在线观看 | 五月婷丁香 | 夜夜操天天干, | 国产成人精品国内自产拍免费看 | 久久免费电影网 | 欧美一区二视频在线免费观看 | 99热最新 | 超碰免费观看 | 99精品国产一区二区 | 丁香婷婷深情五月亚洲 | 久爱精品在线 | 99久久久久免费精品国产 | 欧美成年人在线视频 | 在线观看网站你懂的 | 国产小视频免费在线观看 | 24小时日本在线www免费的 | 黄色三级免费看 | 日本精品在线视频 | 天堂av在线免费 | 麻豆免费视频网站 | 亚洲综合涩 | 亚洲视频在线免费看 | 色97在线| 亚洲国产视频a | 天天草天天草 | 五月婷婷在线视频 | 看片黄网站 | 最新超碰| 亚洲午夜精品久久久久久久久 | 国产91电影在线观看 | 国产精品免费观看久久 | 在线观看片 | 日韩欧美在线观看 | 国产成人一区二区三区免费看 | 日韩视频免费 | 国产精品久久久久久久久久尿 | 丰满少妇一级 | 在线电影日韩 | 91在线免费观看国产 | 国产黄色av网站 | 国产又粗又猛又黄又爽的视频 | 91精品国产电影 | www.五月婷婷.com | 久国产在线播放 | 国产群p| 国产国产人免费人成免费视频 | 国产五月婷 | 五月天久久激情 | 99久久99 | 九九视频精品在线 | 国产中文字幕视频在线观看 | 国产一区高清在线观看 | 成年人视频在线免费 | 三级黄色片在线观看 | 在线视频观看你懂的 | 91色在线观看视频 | 久久久久久久久久久久电影 | 91亚洲精品久久久蜜桃 | av成人免费在线看 | 一级做a视频 | 一区二区三区免费在线观看视频 |