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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

JavaScript DOM编程艺术(第2版) 笔记

發(fā)布時間:2024/9/27 javascript 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JavaScript DOM编程艺术(第2版) 笔记 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

提示:文章寫完后,目錄可以自動生成,如何生成可參考右邊的幫助文檔

目錄

  • 基本概念
  • 1、JavaScript語法
    • 1.1 JavaScript 代碼的執(zhí)行:
    • 1.2 JavaScript 語句
    • 1.3 變量
    • 1.4 數(shù)據(jù)類型
      • 1.4.1 字符串
      • 1.4.2 數(shù)值
      • 1.4.3 數(shù)組
      • 1.4.4 對象
    • 1.5 操作
    • 1.6 條件語句
      • 1.6.1 if 條件語句
      • 1.6.2 比較操作符
      • 1.6.3 邏輯操作符
      • 1.6.4 循環(huán)語句
    • 1.7 函數(shù)
    • 1.8 對象
      • 1.8.1 內(nèi)建對象
      • 1.8.2 宿主對象
  • 2、DOM
    • 2.1 獲取元素
    • 小結(jié)
    • 2.2 獲取和設(shè)置屬性
      • 2.2.1 getAttribute() 方法
      • 2.2.2 setAttribute() 方法
  • 4. JavaScript 圖片庫
    • 4.1 事件處理函數(shù)
    • 4.2 事件處理函數(shù)的工作機(jī)制
    • 4.3 向后兼容
      • 4.3.1 對象檢測
      • 4.3.2 瀏覽器嗅探
    • 4.4 性能考慮
      • 4.4.1 盡量少訪問DOM和盡量減少標(biāo)記
      • 4.4.2 合并和放置腳本
      • 4.4.3 壓縮腳本
  • 5. 動態(tài)創(chuàng)建標(biāo)記
    • 5.1 傳統(tǒng)方法
      • 5.1.1 document.write()方法
      • 5.1.2 innerHTML屬性


基本概念

程序設(shè)計語言 分為 解釋型編譯型 兩大類。Java 或 C++ 等語言需要一個編譯器(compiler)。編譯器是一種程序,能夠把用 Java 等高級語言編寫出來的源代碼翻譯為直接在計算機(jī)上執(zhí)行的文件。

JavaScript 是一種解釋型程序設(shè)計語言。

解釋型程序設(shè)計語言 不需要編譯器——它們僅 需要解釋器。對于 JavaScript 語言,在互聯(lián)網(wǎng)環(huán)境下,Web瀏覽器負(fù)責(zé)完成有關(guān)的解釋和執(zhí)行工作。瀏覽器中的 JavaScript 解釋器將直接讀入源代碼并執(zhí)行。瀏覽器中如果沒有解釋器,JavaScript 代碼就無法執(zhí)行。



1、JavaScript語法


1.1 JavaScript 代碼的執(zhí)行:

  • 方式一:將JavaScript 代碼放到文檔<head>標(biāo)簽中的<script>標(biāo)簽之間;

  • 方式二:把JavaScript代碼保存為一個擴(kuò)展名為 .js 的獨立文件,在文檔的<head>部分放一個<script>標(biāo)簽,并把它的src屬性指向該文件;

但最好的做法是把<script>標(biāo)簽放到HTML文檔的最后,</body>標(biāo)簽之前:

<!DOCTYPE html> <html lang="en"><head><meta charset="UTF-8"/><title>Example</title></head><body>Mark-up goes here...<script src="file.js"></script></body> </html>

—— 這樣能使瀏覽器 更快加載 頁面。

上例中的<script>標(biāo)簽沒有包含傳統(tǒng)的type="text/javascript"屬性。是因為腳本默認(rèn)是 Java Script,所以并沒有必要去指定這個屬性。


1.2 JavaScript 語句

只需簡單地把各條語句放在不同的行上就可以分隔,如下所示:

first statement second statement

但是,在每條語句的末尾都加上一個分號,才是一種良好的編程習(xí)慣:

first statement; second statement;

這樣做讓代碼更容易閱讀。讓每條語句獨占一行的做法能更容易跟蹤JavaScript腳本的執(zhí)行順序。

1.3 變量

JavaScript 允許 直接對變量賦值而 無需事先聲明

很多程序設(shè)計語言中是不允許的。有很多語言要求在使用任何變量之前必須先對它進(jìn)行聲明(declare)。

JavaScript 腳本中,如果對某個變量賦值之前未聲明,賦值操作將自動聲明該變量。

雖然 JavaScript 沒有強(qiáng)制要求程序員必須提前聲明變量,但提前聲明變量是一種良好的編程習(xí)慣。如下所示:

var mood; var age;

不必單獨聲明每個變量,可以用一條語句一次聲明多個變量:

var mood, age;

甚至可以 聲明變量 和對該 變量賦值 一次完成

var mood = "happy"; var age = 33;

或者寫成:

var mood = "happy", age = 33;

在 JavaScript 里,變量 和 其他 語法元素 的名字都是 區(qū)分 字母 大小寫


1.4 數(shù)據(jù)類型

必須 明確類型聲明 的語言稱為 強(qiáng)類型(strongly typed)語言。JavaScript 不需要進(jìn)行類型聲明,因此它是一種 弱類型(weakly typed)語言。

弱類型意味著程序員可以在任何階段改變變量的數(shù)據(jù)類型。

1.4.1 字符串

下面這兩條語句含義完全相同:

var mood = 'happy'; var mood = "happy";

但是,作為一個好的編程習(xí)慣,不管選擇用雙引號還是單引號,整個腳本中應(yīng)保持一致(否則,代碼會變得難以閱讀和理解)。

1.4.2 數(shù)值

JavaScript 也支持浮點數(shù)

var temperature = -20.33333333

1.4.3 數(shù)組


數(shù)組用關(guān)鍵字Array聲明。聲明數(shù)組的同時還可指定數(shù)組的長度(length):

var beatles = Array(4);

數(shù)組下標(biāo)是從0開始計數(shù);

如果無法預(yù)知數(shù)組元素個數(shù),可以在聲明時不給出元素個數(shù):

var beatles = Array();

這是一種相對簡單的方式,在聲明數(shù)組的同時對它進(jìn)行填充

var beatles = Array( "John", "Paul", "George", "Ringo" );

甚至,用不著明確表明是在創(chuàng)建數(shù)組。只需用一對方括號把各個元素的初始值括起即可:

var beatles = [ "John", "Paul", "George", "Ringo" ];

甚至也可以把多種數(shù)據(jù)類型混在一起存入一個數(shù)組:

var lennon = [ "John", 1940, false ];

1.4.4 對象

與使用Array類似,創(chuàng)建對象使用Object關(guān)鍵字。它不使用方括號和下標(biāo)來獲取元素,而是像任何 JavaScript 對象一樣,使用點號來獲取屬性;

var lennon = { name:"John", year:1940, living:false };

用對象來代替?zhèn)鹘y(tǒng)數(shù)組,就用元素的名字而不是下標(biāo)數(shù)字來訪問它們。這提高了腳本的可讀性。

1.5 操作

賦值使用等號(=)。加法操作符加號(+),減法操作符減號(-),除法操作符斜杠(/),乘法操作符星號(*)。

  • +=,可以一次完成 “ 加法和賦值 ”(或“拼接和賦值”)操作:var year = 2010; var message = "The year is "; message += year; alert(message); // The year is 2010 運(yùn)行結(jié)果如下所示:

1.6 條件語句

1.6.1 if 條件語句

條件必須放在if后面的圓括號中。條件的 求值結(jié)果 永遠(yuǎn)是一個 布爾值,即只能是true或false。

if ('條件') {statements; }

并且,只有在給定條件的求值結(jié)果是true的情況下才會執(zhí)行,如下所示:

if (1 > 2) {alert("全世界都瘋了!"); }

上例中,1>2 這個條件的值是false,因此alert消息不會出現(xiàn)。

if語句中的{}(花括號)本身并不是必須的。如果if語句中的{}部分只包含一條語句的話,則可不寫{}且寫在同一行上,如下所示:

if (1 > 2) alert("全世界都瘋了!");

為提高腳本的可讀性,建議在if語句中使用花括號,這是個 好習(xí)慣

else子句:包含在else子句中的語句會在給定條件為假時執(zhí)行:

if (1 > 2) {alert("全世界都瘋了!"); } else {alert("一切都很好"); }

1.6.2 比較操作符

  • 等于(==) :注意,單個等號(=)用于完成賦值操作。

    var my_mood = "happy"; var your_mood = "sad"; if (my_mood == your_mood) {alert("我們都有同樣的感覺."); }

  • 不等于(!=):由一個感嘆號和一個等號構(gòu)成。

    if (my_mood != your_mood) {alert("我們的心情不一樣."); }

    相等操作符==并不表示嚴(yán)格相等

    例如,比較false與一個空字符串會得到什么結(jié)果?

    var a = false; var b = ""; if (a == b) {alert("a 等于 b"); }

    這里,條件語句”a==b“求值結(jié)果為true,因為相等操作符==認(rèn)為 空字符串 與false的含義相同。要進(jìn)行嚴(yán)格比較,就要使用另一種等號(===)。

  • 全等(===):會執(zhí)行嚴(yán)格的比較,不僅比較值,而且會比較變量的類型:

    var a = false; var b = ""; if (a === b) {alert("a 等于 b"); }

    這樣,條件表達(dá)式的求值結(jié)果就是false了,因為Boolean和String不是一種類型。

1.6.3 邏輯操作符

邏輯操作符的操作對象是布爾值。每個邏輯操作數(shù)返回一個布爾值true或者是false。

  • 邏輯與(&&):只有在它的操作數(shù)都為true時,返回true。

    if ( num >= 5 && num <= 10 ) {alert("號碼在正確的范圍內(nèi)."); }

  • 邏輯或(||):操作數(shù)都是true,或其中有一個是true,返回true;當(dāng)操作數(shù)都為false時,返回false。

    if (num > 10 || num < 5) {alert("號碼在正確的范圍內(nèi)."); }

  • 邏輯非(!):把邏輯操作數(shù)所返回的布爾值 取反

    if (!(1 > 2)) {alert("世界一切都好"); } if (!(num > 10 || num < 5)) {alert("號碼在正確的范圍內(nèi)."); }

1.6.4 循環(huán)語句

  • while 循環(huán)

    對循環(huán)控制條件的求值發(fā)生在每次循環(huán)結(jié)束之前:

    while ('條件') {statements; }

    區(qū)別:while循環(huán)只要條件為true,{}里的代碼將反復(fù)執(zhí)行。

    var count = 1; while (count < 11) {alert (count);count++; }

    在這個while循環(huán)的內(nèi)部,用“++”操作符對變量count的值執(zhí)行加1操作,而這會重復(fù)執(zhí)行10次。

    注: 如果循環(huán)控制條件的首次求值結(jié)果是false,后面的程序一次也不會被執(zhí)行。

  • do…while 循環(huán)

    對循環(huán)條件求值在每次循環(huán)結(jié)束之后:

    do {statements; } while ('條件');

    因此,即使循環(huán)條件的首次求值為false,花括號里的語句至少會被執(zhí)行一次

    示例代碼:

    var count = 1; do {alert (count);count++; } while (count < 11);

  • for 循環(huán)

    for 循環(huán)是 while 循環(huán)的一種變體,好處是循環(huán)控制結(jié)構(gòu)更加清晰。

    for (var count = 1; count < 11; count++ ) {alert (count); }

    常見用途:對某個數(shù)組里的全體元素進(jìn)行遍歷處理。



1.7 函數(shù)

為實現(xiàn)同一段代碼的復(fù)用,可以把它們封裝成一個函數(shù)(function)。每個函數(shù)實際上是一個短小的腳本。

定義函數(shù)時,可以聲明任意多個參數(shù),中間用逗號分隔。在函數(shù)的內(nèi)部,可以像使用普通變量那樣使用任何一個參數(shù)。

注意,函數(shù)體內(nèi)部的語句在執(zhí)行時,一旦執(zhí)行到return時,函數(shù)就執(zhí)行完畢,并將結(jié)果返回。因此,函數(shù)內(nèi)部通過條件判斷和循環(huán)可以實現(xiàn)非常復(fù)雜的邏輯。

如果沒有return語句,函數(shù)執(zhí)行完畢后也會返回結(jié)果,只是結(jié)果為undefined。

  • 語法】:

    function name(arguments) {statements; }
  • 示例1】:

    // 定義函數(shù) function shout() {var beatles = Array("John","Paul","George","Ringo");for (var i = 0 ; i < beatles.length; i++ ) {alert(beatles[i]);} } // 調(diào)用函數(shù) shout();

  • 示例2】:

    如下所示,該函數(shù)需要傳遞兩個參數(shù)。如果把 2 個數(shù)值傳遞給函數(shù),這個函數(shù)將對進(jìn)行乘法運(yùn)算:

    function multiply(num1,num2) {var total = num1 * num2;alert(total); }

    在定義了這個函數(shù)的腳本里,即可在任意位置調(diào)用(調(diào)用函數(shù)時,按順序 傳入?yún)?shù)即可):

    multiply(10,2);

  • 【示例3】:
    函數(shù)不僅能夠(以參數(shù)的形式)接收數(shù)據(jù),還能夠返回數(shù)據(jù)。這需要用到return語句:

    function multiply(num1,num2) {var total = num1 * num2;return total; }

    注: 由于 JavaScript 允許傳入任意個參數(shù)而不影響調(diào)用,因此傳入的參數(shù)比定義的參數(shù)多也沒有問題,雖然函數(shù)內(nèi)部并不需要這些參數(shù)。

  • arguments 關(guān)鍵字
    JavaScript 還有一個特殊的關(guān)鍵字arguments,它只在函數(shù)內(nèi)部起作用,并且永遠(yuǎn)指向當(dāng)前函數(shù)的調(diào)用者傳入的所有參數(shù)。arguments類似Array但它不是一個Array:

    function foo(x) {console.log('x = ' + x); // 10for (var i=0; i<arguments.length; i++) {console.log('arg ' + i + ' = ' + arguments[i]); // 10, 20, 30} }// 調(diào)用函數(shù) foo(10, 20, 30);// 控制臺結(jié)果輸出如下: // x = 10 // arg 0 = 10 // arg 1 = 20 // arg 2 = 30

    利用arguments,可以獲得調(diào)用者傳入的所有參數(shù)。即使函數(shù)不定義任何參數(shù),也還是可以拿到參數(shù)的值:

    function abs() {if (arguments.length === 0) {return 0;}var x = arguments[0];return x >= 0 ? x : -x; }abs(); // 0 abs(10); // 10 abs(-9); // 9
    實際上,`arguments`最常用于判斷傳入?yún)?shù)的個數(shù): // foo(a[, b], c) // 接收2~3個參數(shù),b是可選參數(shù),如果只傳2個參數(shù),b默認(rèn)為null: function foo(a, b, c) {if (arguments.length === 2) {// 實際拿到的參數(shù)是a和b,c為undefinedc = b; // 把b賦給cb = null; // b變?yōu)槟J(rèn)值}// ... }

    要把中間的參數(shù)b變?yōu)?“可選” 參數(shù),就只能通過arguments判斷,然后重新調(diào)整參數(shù)并賦值。

  • rest 參數(shù)

    ES6 標(biāo)準(zhǔn)引入了rest參數(shù),該參數(shù)只能寫在最后,前面用...標(biāo)識。

    function foo(a, b, ...rest) {console.log('a = ' + a);console.log('b = ' + b);console.log(rest); }foo(1, 2, 3, 4, 5); // 結(jié)果: // a = 1 // b = 2 // Array [ 3, 4, 5 ]

    從運(yùn)行結(jié)果可知,傳入的參數(shù)先綁定a、b,多余的參數(shù)以數(shù)組形式交給變量rest,所以,不再需要arguments我們就獲取了全部參數(shù)。

    因為rest參數(shù)是 ES6 新標(biāo)準(zhǔn),所以需要先測試一下瀏覽器是否支持:用rest參數(shù)編寫一個sum()函數(shù),接收任意個參數(shù)并返回它們的和:

    function sum(...rest) {??? } // 測試: var i, args = []; for (i=1; i<=100; i++) {args.push(i); } if (sum() !== 0) {console.log('測試失敗: sum() = ' + sum()); } else if (sum(1) !== 1) {console.log('測試失敗: sum(1) = ' + sum(1)); } else if (sum(2, 3) !== 5) {console.log('測試失敗: sum(2, 3) = ' + sum(2, 3)); } else if (sum.apply(null, args) !== 5050) {console.log('測試失敗: sum(1, 2, 3, ..., 100) = ' + sum.apply(null, args)); } else {console.log('測試通過!'); }


1.8 對象

對象 是自包含的 數(shù)據(jù)集合,包含在對象里的數(shù)據(jù)可以通過兩種形式訪問—— 屬性(property) 和 方法(method):

  • 屬性:隸屬于某個特定對象的 變量
  • 方法:只有某個特定對象才能調(diào)用的 函數(shù)

對象就是由一些屬性和方法組合在一起而構(gòu)成的一個 數(shù)據(jù)實體

創(chuàng)建對象實例需使用new關(guān)鍵字:

var jeremy = new Person;

1.8.1 內(nèi)建對象

JavaScript 提供了一系列預(yù)先定義好的對象,這些對象稱為 內(nèi)建對象(native object),例如Array對象、Math對象、Date對象。

在編寫 JavaScript 腳本時,內(nèi)建對象可以幫助我們 快速簡單 地完成許多任務(wù)。

當(dāng)使用new關(guān)鍵字初始化一個 數(shù)組 時,其實是在創(chuàng)建一個Array對象的 新實例

var beatles = new Array();

Math對象的round方法可以把十進(jìn)制數(shù)值舍入為一個與之最接近的整數(shù):

var num = 7.561; var num = Math.round(num); alert(num);

Date對象可以用來存儲和檢索與特定日期和時間有關(guān)的信息。在創(chuàng)建新實例時,JavaScript 解釋器將自動地使用當(dāng)前日期時間對它進(jìn)行初始化:

var current_date = new Date();

1.8.2 宿主對象

對Web應(yīng)用來說,就是由瀏覽器這個運(yùn)行環(huán)境預(yù)先定義好的其他對象。它不是 JavaScript 語言本身提供的。

我們把由瀏覽器提供的預(yù)定義對象稱為 宿主對象(host object)。

宿主對象包括Form、Image、Element、document對象等。可以通過這些對象獲得網(wǎng)頁上表單、圖像和各種表單元素的信息。



2、DOM


2.1 獲取元素

有 3 種 DOM 方法可獲取元素節(jié)點,分別是通過 元素ID、通過 標(biāo)簽名字 和通過 類名 來獲取。

注意,JavaScript 語言區(qū)分字母大小寫。


  • getElementById

    它是document對象特有的函數(shù),getElementById方法只有一個參數(shù)。返回一個對象

    document.getElementById(id)

  • getElementsByTagName

    該方法返回對象數(shù)組,每個對象分別對應(yīng)文檔里給定標(biāo)簽的一個元素。只有一個參數(shù),它的參數(shù)是標(biāo)簽的名字:

    element.getElementsByTagName(tag)

    注: 即使整個文檔里這個標(biāo)簽只有一個元素,getElementsByTagName返回的也是一個數(shù)組,此時數(shù)組長度為1。

    為改善代碼的可讀性:可把document.getElementsByTagName("li")賦值給一個變量。如下所示:

    var items = document.getElementsByTagName("li"); for (var i=0; i < items.length; i++) {alert(typeof items[i]); }

  • getElementById和getElementsByTagName綜合運(yùn)用。

    如果想知道id屬性值為purchase的元素包含著多少個列表項,必須通過一個更具體的對象去調(diào)用這個方法,如下所示:

    var shopping = document.getElementById("purchases"); var items = shopping.getElementsByTagName("*");

  • getElementsByClassName
    該方法返回值是一個數(shù)組

    HTML5 DOM(http://www.whatwg.org/specs/web-apps/current-work/)中新增一個方法:getElementsByClassName。該方法能夠通過class屬性中的類名來訪問元素。

    document.getElementsByClassName("sale")

    getElementsByClassName方法只有較新的瀏覽器才支持,下面這個自定義函數(shù)能使之 兼容 新老瀏覽器:

    function getElementsByClassName(node, classname) {if (node.getElementsByClassName) {// 使用現(xiàn)有方法return node.getElementsByClassName(classname);} else {var results = new Array();var elems = node.getElementsByTagName("*");for (var i=0; i<elems.length; i++) {if (elems[i].className.indexOf(classname) != -1) {results[results.length] = elems[i];}}return results;} }

    此getElementsByClassName函數(shù)接受兩個參數(shù)。第一個node表示DOM樹中的搜索起點,第二個classname就是要搜索的類名了。

    如果傳入節(jié)點上已經(jīng)存在了適當(dāng)?shù)膅etElementsByClassName函數(shù),那么這個新函數(shù)就直接返回相應(yīng)的節(jié)點列表。

    如果getElementsByClassName函數(shù)不存在,這個新函數(shù)就會循環(huán)遍歷所有標(biāo)簽,查找?guī)в邢鄳?yīng)類名的元素(這個例子不適用于多個類名。)

    如果使用這個函數(shù)來模擬前面取得購物列表的操作,就可以這樣寫:

    var shopping = document.getElementById("purchases"); var sales = getElementsByClassName(shopping, "sale");


小結(jié)

  • 一份 文檔 就是一棵 節(jié)點樹
  • 節(jié)點分為不同的類型:元素節(jié)點屬性節(jié)點文本節(jié)點 等。
  • getElementById將返回一個 對象,該對象對應(yīng)著文檔里的一個特定的元素節(jié)點。
  • getElementsByTagName和getElementsByClassName將返回一個 對象數(shù)組,它們分別對應(yīng)著文檔里的一組特定的元素節(jié)點。
  • 每個節(jié)點 都是一個 對象


  • 2.2 獲取和設(shè)置屬性

    得到需要的元素以后,我們就可以設(shè)法獲取它的各個屬性。

    • getAttribute()方法:獲取元素的各個屬性;
    • setAttribute()方法:更改屬性節(jié)點的值。

    2.2.1 getAttribute() 方法

    getAttribute方法只有 1 個參數(shù)(要查詢的屬性名),由于該方法 不屬于document 對象,所以不能通過 document 對象調(diào)用,只能 通過元素節(jié)點對象調(diào)用

    【語法】:

    object.getAttribute(attribute) // attribute:屬性

    【語法示例】:

    var paras = document.getElementsByTagName('p'); for (var i=0; i < paras.length; i++ ) {alert(paras[i].getAttribute('title')); }

    當(dāng)某個<p>元素沒有title屬性時,getAttribute("title")方法會返回null值;

    如果只在title屬性有值時才彈出消息,則需要增加if語句來檢查getAttribute的返回值是不是null。同時我們增加幾個變量以提高腳本的可讀性:

    var paras = document.getElementsByTagName('p'); for (var i=0; i< paras.length; i++) {var title_text = paras[i].getAttribute('title');if (title_text != null) {alert(title_text);} }

    可以進(jìn)一步優(yōu)化如下:

    var paras = document.getElementsByTagName('p'); for (var i=0; i< paras.length; i++) {var title_text = paras[i].getAttribute('title');if (title_text) alert(title_text); }

    2.2.2 setAttribute() 方法

    setAttribute() 方法允許對屬性節(jié)點的值做出修改。與getAttribute一樣,setAttribute也只能用于元素節(jié)點:

    【語法】:

    object.setAttribute(attribute,value)

    【示例】:

    var shopping = document.getElementById('purchases'); shopping.setAttribute('title','貨物清單');

    第一條語句獲取到id為purchase的元素,第二條語句把該元素的title屬性的值設(shè)置為貨物清單( 注意語法,這里的 屬性 之間用英文逗號,分隔 —— 本文筆者注)。

    驗證title屬性的值:

    var shopping = document.getElementById('purchases'); console.log(shopping.getAttribute('title')); // 輸出 nullshopping.setAttribute('title','貨物清單'); console.log(shopping.getAttribute('title')); // 輸出 “貨物清單”

    控制臺第一次輸出空白,第二次會輸出“貨物清單”;

    上例中,設(shè)置了一個節(jié)點的title屬性,這個屬性原先并不存在。setAttribute實際完成了兩項操作:先創(chuàng)建這個屬性,然后設(shè)置它的值。如果setAttribute用在一個本身就有這個屬性的元素節(jié)點上,那么該屬性的值會被覆蓋。

    通過setAttribute對文檔做出修改后,在通過瀏覽器的view source(查看源代碼)選項去查看文檔的源代碼時看到的仍是改變前的屬性值,也就是說,setAttribute做出的修改不會反映在文檔本身的源代碼里

    這種“表里不一”的現(xiàn)象源自DOM的工作模式:先加載文檔的靜態(tài)內(nèi)容,再動態(tài)刷新,動態(tài)刷新不影響文檔的靜態(tài)內(nèi)容。這正是DOM的真正威力:對頁面內(nèi)容進(jìn)行刷新卻不需要在瀏覽器里刷新頁面。



    4. JavaScript 圖片庫

    4.1 事件處理函數(shù)

    事件處理函數(shù)的作用是,在特定事件發(fā)生時調(diào)用特定的 JavaScript 代碼。

    • onmouseover:鼠標(biāo)懸停某個元素上時觸發(fā)動作;
    • onmouseout:鼠標(biāo)離開某個元素時觸發(fā)動作;
    • onclick:用戶點擊某個鏈接時觸發(fā)動作。

    4.2 事件處理函數(shù)的工作機(jī)制

    onclick存在默認(rèn)行為,某些情況下需要對其進(jìn)行阻止。如a標(biāo)簽的默認(rèn)跳轉(zhuǎn)行為。

    一旦事件發(fā)生,相應(yīng)的 JavaScript 代碼就會得到執(zhí)行并返回一個值,該值被傳遞給事件處理函數(shù)。

    例如,我們給某個鏈接添加一個onclick事件處理函數(shù),并讓處理函數(shù)所觸發(fā)的JavaScript代碼返回布爾值true或false。當(dāng)鏈接被點擊時,如果返回的值是true,onclick事件處理函數(shù)就認(rèn)為“這個鏈接被點擊了”,反之亦然。

    可通過下面這個簡單測試去驗證這一結(jié)論:

    <a href="http://blog.driverold.com" onclick="return false;">點我</a>

    當(dāng)點擊鏈接時,因為onclick事件處理函數(shù)所觸發(fā)的JavaScript代碼返回給它的值是false,所以這個鏈接的默認(rèn)行為沒有被觸發(fā)。

    同樣道理,如果像下面這樣,在onclick事件處理函數(shù)所觸發(fā)的 JavaScript 代碼里增加一條return false語句,也可以防止用戶被帶到目標(biāo)鏈接窗口:

    <li><a href="images/fireworks.jpg" onclick="showPic(this); ? return false;" title="煙花表演"> 煙花 </a> </li>

    4.3 向后兼容

    4.3.1 對象檢測

    檢測瀏覽器對JavaScript的支持程度:

    只要把某個方法打包在一個if語句里,就可以根據(jù)這條if語句的條件表達(dá)式的求值結(jié)果是true(方法存在)還是false(方法不存在)來決定應(yīng)該采取怎樣的行動。這種檢測稱為 對象檢測(object detection)

    注: 在使用對象檢測時,一定要刪掉方法名后面的圓括號,如果不刪掉,測試的將是方法的結(jié)果,無論方法是否存在。

    【示例】:

    function myFunction() {if (document.getElementById) {statements using getElementById} }

    因此,如果某個瀏覽器不支持getElementById()方法,它就不會執(zhí)行使用此方法的語句。

    但這樣寫會有一個問題,如果要對多個DOM方法、屬性進(jìn)行判斷,那么就會嵌套無數(shù)的花括號,可以采用邏輯非(!)操作符和邏輯或(||)操作符簡化:

    if (!document.getElementById || !document.getElementsByTagName) return false;

    【示例】

    window.onload = function() {if (!document.getElementsByTagName) return false; // 退出函數(shù)并返回falsevar lnks = document.getElementsByTagName("a");for (var i=0; i<lnks.length; i++) {if (lnks[i].getAttribute("class") == "popup") {lnks[i].onclick = function() {popUp(this.getAttribute("href"));return false;}}} }

    這樣,可以確保那些 “古老的” 瀏覽器不會因為腳本代碼而出問題。也是為了讓腳本有良好的向后兼容性。


    4.3.2 瀏覽器嗅探

    瀏覽器嗅探 指通過提取瀏覽器供應(yīng)商提供的信息來解決向后兼容問題。

    從理論上講,可以通過JavaScript代碼檢索關(guān)于瀏覽器品牌和版本的信息,但這是一種風(fēng)險非常大的技術(shù)。

    • 因為歷史原因,某些瀏覽器會把自己報告為另外一種瀏覽器;
    • 瀏覽器嗅探腳本會變得越來越復(fù)雜
      • 如果想讓瀏覽器嗅探腳本能夠跨平臺工作,就必須測試所有可能出現(xiàn)的供應(yīng)商和版本號組合。這是一個無窮盡的任務(wù);
      • 測試的組合情況越多,代碼就越復(fù)雜和冗長。
    • 為做到瀏覽器版本的精確匹配,每當(dāng)市場上出現(xiàn)新版本時,就不得不修改這些腳本。

    4.4 性能考慮

    不要忽視腳本對 Web 應(yīng)用整體性能的影響。為保證應(yīng)用流暢地運(yùn)行,在為文檔編寫和應(yīng)用腳本時,需要注意一些問題:

    • 盡量少訪問DOM和盡量減少標(biāo)記;
    • 合并和放置腳本;
    • 壓縮腳本

    4.4.1 盡量少訪問DOM和盡量減少標(biāo)記

    訪問 DOM 的方式對腳本性能會產(chǎn)生非常大的影響。如下所示:

    if (document.getElementsByTagName("a").length > 0) {var links = document.getElementsByTagName("a");for (var i=0; i<links.length; i++) {// 對每個鏈接做處理} }

    不管什么時候,只要是查詢 DOM 中的某些元素,瀏覽器都會搜索整個DOM 樹,從中查找可能匹配的元素。

    上列中,這段代碼使用了兩次getElementsByTagName方法去執(zhí)行相同的操作,浪費了一次搜索。

    更好的辦法是把第一次搜索的結(jié)果保存在一個變量中,然后在循環(huán)里重用該結(jié)果,比如:

    var links = document.getElementsByTagName("a"); if (links.length > 0) {for (var i=0; i<links.length; i++) {// 對每個鏈接做點處理} }

    這樣,代碼功能沒有變,但搜索 DOM 的次數(shù)由兩次降低到了一次

    另外,盡量減少文檔中的(HTM結(jié)構(gòu))標(biāo)記數(shù)量。過多不必要的元素只會增加 DOM 樹的規(guī)模,進(jìn)而增加遍歷 DOM 樹以查找特定元素的時間。


    4.4.2 合并和放置腳本

    推薦的做法是外部腳本文件,即通過<script>元素引入,如下所示:

    <script src="script/function.js"></script>
    • 合并

      避免類似下面這種情況:

      <script src="script/functionA.js"></script> <script src="script/functionB.js"></script> <script src="script/functionC.js"></script> <script src="script/functionD.js"></script>

      正確的做法是把functionA.js、functionB.js、functionC.js和functionD.js合并到一個腳本文件中,以減少加載頁面時發(fā)送的請求數(shù)量。

    • 放置腳本

      把腳本放在文檔的<head>區(qū)域。這是傳統(tǒng)做法,但是位于<head>塊中的腳本會導(dǎo)致瀏覽器 無法并行加載 其他文件(如圖像或其他腳本);

      根據(jù) HTTP 規(guī)范,瀏覽器每次從同一個域名最多只能同時下載2個文件。

      而在下載腳本期間,瀏覽器不會下載其他任何文件,即使是來自不同域名的文件也不會下載,所有其他資源都要等腳本加載完畢后才能下載。

      把所有<script>標(biāo)簽都放到文檔的末尾,</body>標(biāo)記之前,就可以讓頁面變得更快。這樣,即使在加載腳本,window對象的load事件依然可以執(zhí)行對文檔進(jìn)行的各種操作。


    4.4.3 壓縮腳本

    壓縮腳本,指的是把腳本文件中不必要的字節(jié)(如空格和注釋),統(tǒng)統(tǒng) 刪除,從而達(dá)到 “ 壓縮 ” 文件的目的。

    多數(shù)情況下,你應(yīng)該有兩個版本,一個是工作副本,可以修改代碼并添加注釋;另一個是精簡副本,用于放在站點上。通常,為了與非精簡版本區(qū)分開,最好在精簡副本的文件名中加上min字樣:

    <script src="scripts/scriptName.min.js"></script>

    壓縮腳本文件,可以 加快加載速度


    這可以借助工具來替你完成這件事。


    推薦的代碼壓縮工具

    Douglas Crockford 的JSMin(http://www.crockford.com/javascript/jsmin.html);

    雅虎的YUI Compressor(http://developer.yahoo.com/yui/compressor);

    谷歌的Closure Compiler(http://closure-compiler.appspot.com/home)。



    5. 動態(tài)創(chuàng)建標(biāo)記


    5.1 傳統(tǒng)方法

    5.1.1 document.write()方法

    document 對象的write()方法可以方便快捷地把字符串插入到文檔里。

    缺點: 違背了 “行為應(yīng)與表現(xiàn)分離” 的原則。即使把 document.write 語句挪到外部函數(shù)里,也還是需要在HTML標(biāo)記的<body>部分使用<script>標(biāo)簽才能調(diào)用那個函數(shù)。

    function insertParagraph(text) {var str = "<p>";str += text;str += "</p>";document.write(str); }

    把這個函數(shù)保存在外部文件example.js里。為了調(diào)用該函數(shù),必須在標(biāo)記里插入<script>標(biāo)簽:

    <!DOCTYPE html> <html lang="en"> <head><meta charset="utf-8" /><title>Test</title><script src="example.js"></script> </head> <body> <script>insertParagraph("This is inserted.");</script> </body> </html>

    像上面這樣的例子,這樣的標(biāo)記既不容易閱讀和編輯,還很容易導(dǎo)致驗證錯誤。比如<script>標(biāo)簽后面的“<p>”很容易被誤認(rèn)為是<p>標(biāo)簽。

    只要有可能,就應(yīng)該用外部CSS文件代替<font>標(biāo)簽去設(shè)定和管理網(wǎng)頁的樣式信息,最好用外部 JavaScript 文件去控制網(wǎng)頁的行為。應(yīng)避免在<body>部分亂用<script>標(biāo)簽,避免使用document.write方法。


    5.1.2 innerHTML屬性

    如今的瀏覽器幾乎都支持屬性innerHTML,該屬性并非 W3C DOM 標(biāo)準(zhǔn)的組成部分,但現(xiàn)已經(jīng)包含到 HTML5 規(guī)范中。

    它可用來讀、寫 給定元素 里的 HTML 內(nèi)容。

    總結(jié)

    以上是生活随笔為你收集整理的JavaScript DOM编程艺术(第2版) 笔记的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

    久久99欧美 | www.在线观看视频 | 在线观看国产高清视频 | 一区电影| 久久午夜色播影院免费高清 | 99婷婷狠狠成为人免费视频 | 国产精品黄 | 黄色网在线播放 | 中文字幕一区二区在线观看 | 色综合色综合色综合 | 人人搞人人搞 | 97视频播放| 亚洲一区二区三区毛片 | 蜜臀aⅴ国产精品久久久国产 | 欧美一区二区三区四区夜夜大片 | 一区二区电影在线观看 | 美女视频黄,久久 | 9797在线看片亚洲精品 | 精品国产区| 午夜精品在线看 | 亚洲精品午夜久久久久久久久久久 | 久久精品一区二区三区四区 | 深夜福利视频在线观看 | 国产99在线 | 国产精品第一页在线 | 久久激情久久 | 天天干.com | 免费中午字幕无吗 | 欧美一级日韩三级 | 欧美久久精品 | 中文字幕资源网在线观看 | 国产精品美女 | 在线国产欧美 | 国产精品黄色影片导航在线观看 | 日韩免费在线观看网站 | 99超碰在线观看 | 婷婷网在线 | 国产日韩视频在线 | 日本女人在线观看 | 久久天天躁狠狠躁夜夜不卡公司 | 国产成人一区二区三区免费看 | 欧美日韩免费观看一区=区三区 | 亚洲一级黄色av | 有码中文在线 | 国产最新在线视频 | 亚洲色五月| 国产欧美日韩精品一区二区免费 | 一区二区 不卡 | 精品一区二区三区四区在线 | 久久综合九色综合欧美狠狠 | 国产精品麻豆一区二区三区 | 这里只有精品视频在线观看 | 五月天视频网站 | 国产精品久久久久久久久久不蜜月 | 欧美精品在线观看 | 欧美一区二区伦理片 | 欧美亚洲成人xxx | 日黄网站| 免费观看的av| 亚洲永久av | 亚洲综合干 | 高清av免费观看 | 最近中文字幕高清字幕在线视频 | 开心激情网五月天 | 欧美 日韩 成人 | 色婷婷成人网 | 久草免费在线观看 | 亚洲激情一区二区三区 | 色91在线 | 日韩黄色av网站 | 在线播放精品一区二区三区 | 亚洲视频免费 | 蜜桃麻豆www久久囤产精品 | 久草免费在线 | 欧美色图30p| 精品国产伦一区二区三区观看方式 | 久久久99久久 | 欧美日韩国产免费视频 | 视频国产在线观看18 | 一区三区在线欧 | 激情综合亚洲 | 波多野结衣理论片 | 久久艹在线 | 狠狠狠狠狠狠狠干 | 欧美日韩中文国产一区发布 | 一区二区三区在线不卡 | 久久精品屋| 久av电影| 欧美精品小视频 | 亚洲精品www久久久 www国产精品com | 婷婷六月综合亚洲 | 天天射天天干天天插 | 午夜精品99久久免费 | 欧美电影在线观看 | 五月婷婷丁香色 | 午夜精品久久久久久久久久久久 | 欧美在线91 | 伊人五月天| www.97视频| 亚洲经典中文字幕 | 国产xxxxx在线观看 | 久久精品亚洲一区二区三区观看模式 | 亚洲国产日韩欧美在线 | 日韩在线观看中文字幕 | 国产啊v在线观看 | 激情影院在线 | 久久国产a | 国产+日韩欧美 | 91麻豆精品一区二区三区 | 亚洲精品乱码久久久久久 | 日韩免费视频在线观看 | 久久综合婷婷综合 | 三级性生活视频 | 色婷婷综合久久久久 | 热久久影视 | 国产中文字幕在线观看 | 色综合久久88色综合天天人守婷 | 亚洲天堂精品视频 | 激情文学丁香 | 国产麻豆精品一区二区 | 99精品在线免费观看 | 久久久精品影视 | 国产一区在线免费观看视频 | 免费在线观看av不卡 | 日韩精品一区二区在线视频 | 蜜臀一区二区三区精品免费视频 | 久久婷婷色 | 精品视频一区在线观看 | 国产品久精国精产拍 | 国产 欧美 日产久久 | 99色视频 | 一区二区三区四区五区六区 | 亚洲午夜大片 | 欧美性大胆| 探花视频在线观看 | 涩涩网站免费 | 涩av在线| 国产精品久久久久永久免费看 | 免费观看十分钟 | 免费视频色 | 欧美成人精品在线 | 成人在线免费av | 少妇av片| 狠狠的操你 | 国产黄色电影 | 亚洲电影一级黄 | 久久这里只有精品视频首页 | 成人黄在线观看 | 91麻豆高清视频 | 蜜臀一区二区三区精品免费视频 | 成人毛片在线视频 | 午夜国产福利在线观看 | 久久夜色精品亚洲噜噜国4 午夜视频在线观看欧美 | 亚洲欧美日韩在线看 | 在线播放 日韩专区 | 欧美精品亚洲二区 | 97国产视频 | 日韩视频中文 | 亚洲美女视频在线 | 四虎永久国产精品 | 天天摸天天干天天操天天射 | 免费在线观看日韩欧美 | 亚洲国产中文字幕在线观看 | 最近最新mv字幕免费观看 | 日日干夜夜草 | 在线观看免费成人av | 中国精品一区二区 | 欧美成人影音 | 国产日韩欧美在线 | www.天天干.com| 在线视频 成人 | 深夜免费福利在线 | 亚州性色 | av电影在线免费观看 | 国产在线观看99 | 91.精品高清在线观看 | 亚洲国产一区在线观看 | 成人av日韩 | 国产黄a三级三级 | 日韩在线中文字幕 | 五月综合网站 | 成人黄色在线 | 日韩在线观看高清 | 国产成a人亚洲精v品在线观看 | 91 中文字幕| 日批视频在线 | 伊人永久在线 | 国产成人精品一区在线 | 色综合久久久久久中文网 | 久久精品网址 | 国产黄色精品在线观看 | av丝袜制服| 亚洲黄色小说网址 | 免费看搞黄视频网站 | 丝袜美腿在线播放 | 精品在线一区二区 | 成人一级黄色片 | 国产成人av电影在线观看 | 永久免费毛片 | 一级片视频免费观看 | 婷婷激情久久 | 最近中文字幕完整高清 | 国产又粗又猛又色又黄视频 | 久久国产免费视频 | 天天干人人干 | 欧美精品一区二区在线播放 | 国产精品久久久久久久久搜平片 | 免费瑟瑟网站 | 久久日本视频 | 久久综合九色99 | 九九视频热 | 午夜久久久久久久久久影院 | 国产一级a毛片视频爆浆 | 超碰人人草人人 | 奇米网网址 | 国产人成一区二区三区影院 | 久久丁香 | 日本久久高清视频 | 欧美日韩视频免费看 | 美女露久久 | 免费精品国产 | 中文字幕在线成人 | 国产福利一区二区在线 | 丁香婷婷射 | 97视频免费在线观看 | 国外成人在线视频网站 | 成人亚洲免费 | 伊人五月综合 | 激情开心色 | 超碰在线观看av | 97在线观看免费高清完整版在线观看 | 亚洲精品在线看 | 麻豆视传媒官网免费观看 | 欧美淫aaa免费观看 日韩激情免费视频 | www.91av在线 | 99免费精品视频 | 999电影免费在线观看 | 国产精品视频久久久 | 国产在线观看你懂的 | 少妇高潮冒白浆 | 午夜视频色 | 久久午夜电影 | 欧美精品久久久久久久久老牛影院 | 欧美精品一区二区在线观看 | 国产麻豆精品95视频 | 91在线中文 | 午夜av在线播放 | 国产 一区二区三区 在线 | 欧美男同网站 | 狠狠操狠狠 | 在线 国产 亚洲 欧美 | 色综合激情网 | 毛片网站在线观看 | 免费视频a| 精品产品国产在线不卡 | 久久久久国产a免费观看rela | ,午夜性刺激免费看视频 | 精品网站999www | 亚洲欧美怡红院 | 99视频+国产日韩欧美 | 日本特黄一级 | www.99av | 中文字幕一区二区在线观看 | 成人国产精品入口 | 日韩网站在线播放 | 欧美日韩高清在线 | 久久免费精品 | 亚洲黄色免费在线 | 久久精品99国产精品亚洲最刺激 | 亚洲精品久久久蜜桃直播 | 欧美日韩国产高清视频 | 97超碰资源总站 | 国产一级高清视频 | wwwwwww黄| 欧美成年人在线视频 | 久久精品中文 | 一区二区免费不卡在线 | av电影一区 | 久久久久久久久久久网 | 中文字幕在线视频一区二区三区 | 国产黄大片在线观看 | 中文字幕免费久久 | 伊人伊成久久人综合网小说 | 日本中出在线观看 | 在线 国产 日韩 | 亚洲欧美日本一区二区三区 | 欧美日韩免费在线观看视频 | 久久精品欧美一区 | 欧美人zozo | 日日干天天 | 国产高清在线a视频大全 | 精品亚洲免费 | 婷婷激情小说网 | 天天舔天天射天天操 | 国产视频久久 | www.夜夜骑.com| 伊甸园永久入口www 99热 精品在线 | 日韩理论片 | 成人午夜精品 | 日本性生活免费看 | 精品国产一区二区三区久久久久久 | 久草在线视频首页 | 激情五月网站 | 成人动漫一区二区 | 日日夜夜操av | 欧美日韩中文视频 | 婷婷色站| 黄色一级大片在线免费看产 | 美女精品久久 | 久久久久欧美精品999 | caobi视频 | 中文字幕日韩有码 | 久久久久久久影院 | 日韩午夜精品福利 | 99国产在线观看 | 国产女做a爱免费视频 | 国产成人av免费在线观看 | 国产成人在线网站 | 色婷婷狠 | 一级做a视频 | 国产极品尤物在线 | 超碰97人人干 | 福利视频入口 | 国产一区二区免费在线观看 | 成人一级免费视频 | 99热精品免费观看 | 免费国产黄线在线观看视频 | 一区二区中文字幕在线观看 | 天天做日日做天天爽视频免费 | 久久久久www | 99精品一级欧美片免费播放 | 国产精品久久在线观看 | 成人午夜av电影 | 国产精品久久久久国产精品日日 | 色91在线视频 | 国产a级精品 | 国产免费一区二区三区最新 | 成人免费共享视频 | 中文字幕视频一区二区 | www.久久久.cum| 黄色tv视频 | 久久国产精品一区二区三区四区 | 在线国产激情视频 | 欧美日韩国产精品一区二区亚洲 | 在线观看成人 | 久久不卡国产精品一区二区 | 国产视频一区在线播放 | 99视频精品全部免费 在线 | 久久成人免费电影 | 最近中文字幕在线中文高清版 | 日韩精品一卡 | 国产一区二区精品久久91 | 五月婷婷操| 免费看的av片 | 顶级bbw搡bbbb搡bbbb | 五月天电影免费在线观看一区 | 欧美精品一区二区免费 | japanesexxxhd奶水 国产一区二区在线免费观看 | 五月婷婷操| 日韩在线视频免费看 | 人人狠狠综合久久亚洲 | 久久人人爽爽 | 天天躁天天操 | 碰超在线观看 | 亚洲一区网站 | 日韩中文字幕免费视频 | 久久国产香蕉视频 | 亚洲黄色免费电影 | 夜夜操天天摸 | 色婷婷午夜 | 精品国产综合区久久久久久 | 免费看在线看www777 | 深夜免费福利 | 99久久综合国产精品二区 | 五月天婷婷丁香花 | 精品在线观看一区二区 | 亚洲欧美日韩精品久久奇米一区 | 久久国产精品99久久久久久老狼 | 黄色av网站在线观看 | 黄色免费网战 | 天天干,夜夜爽 | 欧美日产在线观看 | 三级av免费| 久久精品综合 | 超碰在线观看av | 97成人资源 | 日韩高清dvd | 国产精品av久久久久久无 | 激情丁香5月 | 中文乱幕日产无线码1区 | 波多野结衣理论片 | www天天干com| 国产精品久久久久久av | 国产美女在线精品免费观看 | 久久不卡日韩美女 | 欧美aa一级片 | 午夜国产福利在线 | 午夜123| 色视频网页 | 在线a视频 | 日韩一二区在线 | 国产在线视频一区二区 | 色夜视频 | 久久久久久视频 | 一区二区三区高清在线 | 美腿丝袜一区二区三区 | 天天射天天干天天操 | www免费在线观看 | 一区二区三区 亚洲 | 一区二区三区免费网站 | 精品久久久久久久久中文字幕 | av大片免费在线观看 | 日韩一区二区三区视频在线 | 国产一区二区在线免费视频 | 精品在线亚洲视频 | 国产又粗又猛又爽 | 国产精品嫩草影院99网站 | 久久69精品久久久久久久电影好 | 免费美女久久99 | 欧美成人在线免费 | 欧美日韩国产精品一区二区三区 | 国产精品视频地址 | 在线91观看| 狠狠色狠狠综合久久 | 91香蕉国产在线观看软件 | 免费一级片观看 | 最新国产精品拍自在线播放 | 亚洲免费成人av电影 | 四虎成人精品在永久免费 | 精品亚洲网 | 婷婷资源站| 久久精品一区二区三区中文字幕 | 欧美久久久久久久久久久久 | 国产在线不卡一区 | 亚洲国产精品va在线看黑人动漫 | 涩涩成人在线 | 日韩精品一区二区免费 | 国产福利专区 | 99色婷婷 | 国产成本人视频在线观看 | 国产你懂的在线 | 欧美日韩国产一区二 | 国产高清在线观看av | 国产精品久久久免费看 | www麻豆视频 | 亚洲国产欧美在线看片xxoo | 国产精品大尺度 | 五月天色站 | 久久影视一区 | 去干成人网| 99性视频| 美女免费视频一区 | 国产婷婷vvvv激情久 | 久久精品一区 | 超碰成人免费电影 | 亚洲永久免费av | 国产日韩精品在线 | 国产99久久久国产精品免费二区 | 手机看片1042 | 日韩在线首页 | 亚洲人成人99网站 | 黄色毛片视频 | 视频在线99 | 麻豆影视在线免费观看 | 成年人三级网站 | 最新中文字幕在线观看视频 | 日韩免费一级电影 | 超碰人人做 | 欧美精选一区二区三区 | 国产精品白浆视频 | 日韩有码在线观看视频 | 久久99电影| 午夜视频一区二区 | 国内精自线一二区永久 | 国产精品免费观看国产网曝瓜 | 五月婷婷视频在线观看 | 日韩大陆欧美高清视频区 | 黄色在线小网站 | 欧美黑人巨大xxxxx | 99精品视频播放 | 91在线影视 | 国产成人一区二区三区在线观看 | 欧美日韩精品二区第二页 | 精品免费视频123区 午夜久久成人 | 国产丝袜高跟 | 久久精品—区二区三区 | 亚洲做受高潮欧美裸体 | 麻花豆传媒mv在线观看网站 | 国内精品国产三级国产aⅴ久 | 亚洲一区二区三区毛片 | 国产1区在线 | 日本亚洲国产 | 99人成在线观看视频 | 在线黄色av | 夜色.com | 欧美日韩精品在线一区二区 | 国产精品婷婷午夜在线观看 | 日韩在线大片 | 在线观看视频免费播放 | 亚洲自拍av在线 | 亚洲涩涩一区 | 亚洲激情中文 | 久久色中文字幕 | 欧美日韩视频一区二区 | 三级动态视频在线观看 | 日韩不卡高清视频 | 国产专区精品视频 | 超碰97免费| 色久网| 91视频久久久久 | 六月丁香在线视频 | 99久久精品免费看国产免费软件 | 久久久国产影院 | 日韩欧美高清在线观看 | 97视频人人 | 日韩欧美在线播放 | 亚洲综合情 | 亚洲欧美日本A∨在线观看 青青河边草观看完整版高清 | 国产又粗又硬又爽视频 | 国语对白少妇爽91 | 久久黄色免费视频 | www.狠狠干 | 日韩大片在线看 | 久久久伊人网 | 日韩专区中文字幕 | 国产精品热视频 | 欧美精品乱码99久久影院 | 丁香5月婷婷久久 | 91天天视频| 亚洲另类在线视频 | 在线岛国av | 天天操夜操 | 国产日韩欧美视频 | 在线视频一区观看 | 国产精品视频免费观看 | 久久久亚洲精华液 | av综合 日韩| 日韩在线一二三区 | 成年人在线免费看视频 | 中文字幕在线观看视频一区 | 草久视频在线观看 | 伊人中文网 | 欧美视频不卡 | 天天操天天吃 | 免费看三片| 免费 在线 中文 日本 | 777奇米四色 | 91精品网站 | 日韩在线网 | 欧美少妇的秘密 | 在线国产黄色 | 国产日韩在线看 | 99视频这里只有 | 婷婷 综合 色 | 精品久久久久久一区二区里番 | 天天做天天爽 | 免费看三级网站 | 欧美一级看片 | 在线看成人 | 日日干夜夜骑 | www久久久| 国产麻豆剧传媒免费观看 | 精品一二三四五区 | 婷婷久久一区二区三区 | 黄污在线看 | 五月天久久 | 欧美精品在线一区二区 | 亚洲一区二区视频在线 | 美女黄频在线观看 | 人人玩人人添人人澡97 | 久久精品国产一区二区三区 | 日韩美女免费线视频 | 日韩丝袜| 日韩视频免费看 | 国产在线播放一区二区三区 | 日韩免费看视频 | 伊人黄| 2023国产精品自产拍在线观看 | 在线91精品| 国产日韩在线播放 | 麻豆免费在线视频 | 久草在线资源观看 | 色婷婷五 | 天天干天天做 | 国产美腿白丝袜足在线av | 亚洲成人资源在线观看 | 精品二区视频 | 91精品视频在线播放 | 在线免费性生活片 | 天天色天| 欧美最新大片在线看 | av黄免费看 | 99精品视频在线观看视频 | 成人在线免费av | 国产精品一区二区av日韩在线 | 久久久亚洲电影 | 日韩欧美高清不卡 | 精品国产免费一区二区三区五区 | 亚州欧美精品 | 久久精品aaa| 免费黄色av电影 | 天天干天天插伊人网 | 精品一区电影 | 免费观看丰满少妇做爰 | 成人黄色小说网 | 国产一级黄色片免费看 | 精品高清美女精品国产区 | 久久精品视频播放 | 日韩免费观看视频 | 97视频中文字幕 | 开心激情婷婷 | 国产亚洲婷婷免费 | av高清一区二区三区 | 婷婷在线综合 | 日韩欧美电影在线观看 | 国产精品av在线免费观看 | 麻豆视屏 | 日本公妇色中文字幕 | 国产成人免费在线观看 | 久久这里有 | 九九热只有精品 | 国产亚洲视频系列 | 国产在线观看免费观看 | 8x成人免费视频 | 亚洲高清免费在线 | 久久天堂精品视频 | 亚洲精品久久久蜜臀下载官网 | 精品久久久久免费极品大片 | 国产免费中文字幕 | 天天操人| 国产日韩精品一区二区三区 | 国产女做a爱免费视频 | 国产欧美精品一区二区三区 | 国产精品99久久久久久宅男 | 丁香六月中文字幕 | 激情久久久久久久久久久久久久久久 | 成人av片免费观看app下载 | 天天干天天操 | 五月黄色 | 国内精品久久久久久 | 超碰免费成人 | 在线观看不卡视频 | 成年美女黄网站色大片免费看 | 日日成人网 | 99国产精品久久久久老师 | 欧美激情h| 91成人天堂久久成人 | 天天天色综合a | 亚洲精品av中文字幕在线在线 | 激情综合啪 | 亚洲精品在线观看的 | 亚洲视频在线观看免费 | 久久艹中文字幕 | 国产免费二区 | a天堂最新版中文在线地址 久久99久久精品国产 | 色中色综合 | 日韩精品一区二区三区免费观看 | 91精品视频导航 | 久久久久夜色 | 日韩精品久久久久久 | 国产色综合 | 天天插日日插 | 日本激情中文字幕 | 欧美精品一区二区免费 | 日日操夜夜操狠狠操 | 亚洲黄色在线观看 | 成人免费大片黄在线播放 | 国产日产亚洲精华av | 91久久国产自产拍夜夜嗨 | 男女免费av | 这里只有精品视频在线观看 | 麻豆国产精品永久免费视频 | 日本久久免费视频 | 国产一级在线观看 | 婷婷 中文字幕 | 国产精品激情偷乱一区二区∴ | 视频 天天草 | 久久久免费少妇 | 天天色天天上天天操 | 国产日韩精品一区二区三区 | 欧美在线91 | 黄色影院在线观看 | 亚洲欧美日韩一区二区三区在线观看 | 久久观看免费视频 | 久草免费福利在线观看 | 国产精品九九久久久久久久 | 亚洲国产欧美一区二区三区丁香婷 | 99热这里只有精品国产首页 | 亚洲伦理中文字幕 | 操操操干干干 | 夜夜夜草 | 99麻豆视频| 色wwww| 国产小视频免费在线网址 | 中文视频一区二区 | 欧美a√大片 | 狠狠ri | 天天干天天射天天插 | 欧美激情精品久久久久久免费 | 一区二区三区在线免费播放 | 四虎成人精品永久免费av | 丁香资源影视免费观看 | 色视频在线看 | 久久理论电影 | 一区二区视频电影在线观看 | 天天爽夜夜爽人人爽一区二区 | 中国精品一区二区 | 免费国产一区二区视频 | 久久免费视频在线观看6 | 99久久www | 国产精品久久99综合免费观看尤物 | 国产精品一区免费在线观看 | 人人爽夜夜爽 | 日日草天天干 | 激情视频综合网 | 亚洲国产精品视频 | 欧美性生活免费 | 伊人射 | 日韩精品久久久久久久电影竹菊 | 国产高清久久久 | 国产精品久久久久久久久费观看 | 在线观看色网 | 久久影院中文字幕 | 国产中文字幕视频在线观看 | 亚洲精品色婷婷 | 久久超碰99| 久草精品免费 | 丁香花在线视频观看免费 | 亚洲视频精选 | 日日干干 | 激情文学综合丁香 | 久久久噜噜噜久久久 | 97视频成人 | 婷婷九月丁香 | 日韩中文字幕第一页 | 亚洲国产三级在线观看 | 国产综合福利在线 | 久久久免费毛片 | 三级av中文字幕 | 欧美在线视频一区二区三区 | 99国产精品视频免费观看一公开 | 日韩欧美亚洲 | 在线亚洲欧美视频 | 97超碰精品 | 亚洲 欧美 综合 在线 精品 | 亚洲黄色区 | 性色大片在线观看 | 国内精自线一二区永久 | 激情网五月婷婷 | 久久久久久久久久久久av | 一区二区三区视频网站 | 婷婷综合影院 | 婷婷精品国产一区二区三区日韩 | 欧美日韩国产网站 | 午夜久久久久久久久久影院 | 久久久久久久久爱 | 午夜久操| 极品国产91在线网站 | 黄色片免费看 | 成人在线黄色 | 中文字幕超清在线免费 | 国产精品毛片一区二区三区 | 丁香资源影视免费观看 | 99亚洲国产| 丁香婷婷在线观看 | 亚洲视频精品在线 | 在线中文字母电影观看 | 色七七亚洲影院 | 久久久国产精品视频 | 国产色网 | 亚洲色影爱久久精品 | 在线观看黄色免费视频 | 在线a视频免费观看 | 在线免费观看成人 | 天天操天天摸天天爽 | www.天天干 | av网站播放| 国产精品黑丝在线观看 | 午夜美女av | 手机av电影在线 | 天天人人| 丰满少妇在线观看网站 | 久久综合给合久久狠狠色 | 高清av在线 | 国产亚洲精品久久 | 成人av电影免费 | 久久在线观看 | 日本一区二区免费在线观看 | 欧美日韩不卡在线视频 | 狠狠躁夜夜躁人人爽超碰97香蕉 | av电影在线不卡 | 97香蕉久久超级碰碰高清版 | 中国一级片免费看 | 婷婷婷国产在线视频 | 五月天六月婷 | 国产1区2区3区在线 亚洲自拍偷拍色图 | 中文字幕在线有码 | 久久久久日本精品一区二区三区 | 日日摸日日添日日躁av | 69av久久| 日韩欧美99 | 亚洲视屏在线播放 | 欧美一区二区免费在线观看 | 婷婷狠狠操 | 草久在线视频 | 国产91精品看黄网站在线观看动漫 | 四虎亚洲精品 | 亚洲成人免费观看 | 国产在线欧美在线 | 中文字幕一区二区三区乱码在线 | 最近更新好看的中文字幕 | 中日韩在线视频 | 久久不卡日韩美女 | 欧美极品少妇xxxxⅹ欧美极品少妇xxxx亚洲精品 | 国内精品亚洲 | 国产91影视 | 国产一级在线免费观看 | 7777xxxx| 国产视频在线看 | 最近中文字幕视频网 | 成人性生交大片免费看中文网站 | 超级碰碰碰碰 | 国产资源av | 亚洲一区不卡视频 | 91在线视频| 伊人婷婷色 | 91理论片午午伦夜理片久久 | 日韩三级视频在线观看 | 久久热亚洲 | 蜜桃久久久 | 久久综合狠狠综合久久综合88 | 久久综合色综合88 | 亚洲春色综合另类校园电影 | 天天综合色 | 欧美精品xxx | 精品亚洲va在线va天堂资源站 | 久久av免费电影 | 欧美 另类 交| 国产精品免费一区二区 | 深爱激情五月婷婷 | 97人人澡人人添人人爽超碰 | 久久久免费少妇 | 97综合网 | 人人爽人人爽人人 | 91精品一| 国产在线精品区 | 国产69精品久久久久99 | 精品久久久一区二区 | 国产美女久久 | 天天干天天摸 | 五月天久久久久久 | 玖玖爱在线观看 | 手机看片国产日韩 | 午夜天使 | 欧美色久 | 欧美日韩国产精品一区 | 69精品人人人人 | 一级黄毛片 | 国内久久精品视频 | 99精品电影 | 特黄特色特刺激视频免费播放 | 999国内精品永久免费视频 | 久久国产综合视频 | 91人人视频在线观看 | 97精品国产97久久久久久久久久久久 | 在线黄色免费av | 天天爱天天插 | 亚洲精品乱码久久 | 国产在线精品一区二区不卡了 | 午夜18视频在线观看 | 免费在线电影网址大全 | 一本一道久久a久久精品 | 欧美福利精品 | 国内久久 | 日本中文字幕免费观看 | 色中文字幕在线观看 | 又紧又大又爽精品一区二区 | 99视频在线精品国自产拍免费观看 | 国产精品久久久久久久久久尿 | 天天骚夜夜操 | 国产精品成人一区二区三区 | 色综合中文综合网 | 国产区在线看 | 99久久精品国 | 欧美另类人妖 | 成年人国产在线观看 | 男女视频久久久 | 国产电影一区二区三区四区 | 看片黄网站 | 日本三级不卡 | 91在线影视 | 99视频这里只有 | 五月天亚洲激情 | 日韩欧美在线中文字幕 | 国产亚洲精品久久久久久网站 | 亚洲一级片在线观看 | av超碰在线 | 天天干天天干天天射 | 国产精品成人在线 | 高清av中文字幕 | 久99久中文字幕在线 | 亚洲天堂首页 | 91香蕉视频在线 | 成人在线视频网 | 欧美日本中文字幕 | 97香蕉久久超级碰碰高清版 | 色播六月天 | 亚洲一级片av | 国产不卡在线视频 | 国产精品免费视频一区二区 | 国产网红在线 | 日韩免| 亚洲伊人第一页 | 免费在线国产黄色 | 国产18精品乱码免费看 | 在线观看免费观看在线91 | 亚洲免费精品视频 | 国产91av视频在线观看 | 久久黄色a级片 | 丁香婷婷色月天 | 国产色女人 | 在线国产日本 | 日韩动态视频 | 亚洲国内精品在线 | 国产精品永久久久久久久www | 婷婷色在线观看 | 五月婷婷另类国产 | 午夜精品久久久久久久99 | 黄视频网站大全 | 久在线观看视频 | 又黄又刺激的网站 | 午夜精品福利一区二区三区蜜桃 | 国产亚洲视频在线免费观看 | 97人人澡人人添人人爽超碰 | 国产成人精品久久久 | 97成人超碰 | 99中文字幕在线观看 | 日韩a在线| 国产成视频在线观看 | 久久精品亚洲国产 | 亚洲视频免费在线 | 天天操天天射天天操 | 九九视频免费在线观看 | 99热精品久久 | 九九九毛片 | 在线观看国产www | 毛片美女网站 | 国产99在线| 天天想夜夜操 | 中文字幕国产精品一区二区 | 久草香蕉在线 | 久久高视频 | 天天干天天操天天做 | 超级碰99 | 日日精品 | 日韩视频在线播放 | 久久国产区 | 欧美日韩视频在线观看一区二区 | 国产乱老熟视频网88av | 天天看天天干 | 国产中文字幕三区 | 在线三级播放 | 久久久久久久久久免费 | 亚洲天堂精品视频 | 久九视频 | 国产九色在线播放九色 | 午夜精品在线看 | 国产精品免费久久久久 | 69国产精品视频免费观看 | 91丨九色丨蝌蚪丨老版 | 日韩欧美国产激情在线播放 | 狠狠操狠狠干天天操 | 香蕉精品在线观看 | 天天搞天天干天天色 | 91国内在线 | 久久国产午夜精品理论片最新版本 | 伊人小视频| 天天射天天干天天操 | 国产成人精品免费在线观看 | 成人免费网视频 | 国产精品99视频 | 狠狠色香婷婷久久亚洲精品 | 国产午夜精品久久久久久久久久 | 国产精品久久久久久久久久久不卡 | 久草在线视频看看 | 91福利视频网站 | 亚洲va欧美va国产va黑人 | 久久精品国产亚洲 | 一区二区欧美在线观看 | 国产首页 | 一本之道乱码区 | 成人免费大片黄在线播放 | 国产成人一区二区三区在线观看 | 最近最新中文字幕视频 | 九九九热精品免费视频观看网站 | 美女视频黄的免费的 | 蜜臀av性久久久久蜜臀aⅴ涩爱 | 久久人人干|