jQuery 基礎語法

Kun發表於2022-02-27

目錄

jQuery 基礎語法

一、 jQuery 概述

1、 JS 庫

倉庫:可以把很多東西放到這個倉庫裡面,找東西只需要到倉庫裡面查詢到就可以了

JS 庫:即 library,是一個封裝好的特定的集合(方法和函式)。從封裝一大堆函式的角度理解庫,就是在這個庫中,封裝了很多預先定義好的函式裡面,比如動畫 animate、hide、show,比如獲取元素等

簡單理解:就是 JS 檔案,裡面對我們原生 JS 程式碼進行了儲存,存放到裡面。這樣我們可以快速高效的使用這些封裝好的函式

比如 jQuery,就是為了快速方便的操作 DOM,裡面基本都是函式(方法)

2、 jQuery 概念

jQuery 是一個快速、簡潔的 JS 庫,其設計的宗旨是 "writeLessDoMore" ,即倡導寫更少的程式碼,做更少的程式碼

j 就是 JS;Query 查詢;意思就是查詢 JS,把 JS 中的 DOM 操作做了封裝,我們可以快速的查詢使用裡面的功能

jQuery 封裝了 JS 常用的功能程式碼,優化了 DOM 操作、事件處理、動畫設計和 Ajax 互動

學習 jQuery 本質就是學習呼叫這些函式(方法)

jQuery 出現的目的是加快前端人員的開發速度,我們可以非常方便的呼叫和使用它,從而提高開發效率

3、 jQuery 優點

jQuery線上手冊

  • 輕量級,核心檔案才 幾十kb,不會影響頁面載入速度
  • 跨瀏覽器相容,基本相容了現在主流的瀏覽器
  • 鏈式程式設計,隱式迭代
  • 對事件、樣式、動畫支援,大大簡化了 DOM 操作
  • 支援外掛擴充套件開發,有著豐富的第三方外掛,例如:樹形選單、日期控制元件、輪播圖等
  • 免費、開源

二、 jQuery 基本使用

1、 jQuery 使用步驟

  1. 引入 jQuery檔案

    <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
    
  2. 然後直接使用即可

2、 jQuery 入口函式

$ (function () {
    ··· // 此處是頁面 DOM 元素載入完成的入口
})
$ (document).ready(function () {
    ···  // 此處是頁面 DOM 載入完成的入口
})

3、 jQuery 頂級物件

  1. $ 是 jQuery 的別稱,在程式碼中可以使用 jQuery 代替 $,但一般為了方便,通常都直接使用 $
  2. $ 是 jQuery 的頂級物件,相當於原生 JS 中的 window。把元素利用 $ 包裝成 jQuery 物件,就可以呼叫 jQuery 的方法

4、 jQuery 物件和 DOM 物件

  1. 用原生 JS 獲取來的物件就是 DOM 物件
  2. 用 jQuery 方法獲取的元素就是 jQuery 物件
  3. jQuery 物件的本質是:利用 $ 對 DOM 物件包裝後產生的物件(偽陣列形式儲存)
  • jQuery 物件只能使用 jQuery 方法,DOM 物件則使用原生的 JS 屬性和方法

這兩個物件是可以相互轉換的

因為原生 JS 比 jQuery 更大,原生一些屬性和方法 jQuery 沒有給我們封裝,要像是用這些屬性和方法需要把 jQuery 物件轉換為 DOM 物件才能使用

  1. DOM 物件轉換為 jQuery 物件

    $(DOM 物件);
    
  2. jQuery 物件轉換為 DOM 物件

    $("div")[index];  // index 是索引號
    $("div").get(index);  // index 是索引號
    // 該物件以偽陣列的形式儲存
    
<div></div>
<script>
    // DOM 物件
    var div = document.querySelector("div");
	$(div);  // 轉換成 jQuery 物件
	// jQuery 物件
	$("div");
	$("div")[0];  // 轉換成 DOM 物件
</script>

三、 jQuery 常用 API

1、 jQuery 選擇器

原生 JS 獲取元素方式很多、很雜,而且相容性情況不一致,因此 jQuery 給我們提供了封裝,是獲取元素同一標準

$("選擇器")  // 裡面選擇器直接寫成 CSS 選擇器即可,但是要加引號
名稱 用法 描述
ID 選擇器 $("#id"); 獲取指定 ID 的元素
全選選擇器 $("*"); 匹配所有元素
類選擇器 $(".class"); 獲取同一類 class 的元素
標籤選擇器 $("div"); 獲取同一標籤所有元素
並集選擇器 $("div, p, li"); 選取多個元素
交集選擇器 $("li.current"); 交集選擇器
子代選擇器 $("ul>li"); 使用 > 號,獲取親兒子層級的元素
後代選擇器 $("ul li"); 使用空格,代表後代選擇器,包括孫子等

2、 隱式迭代

遍歷內部 DOM 元素(偽陣列形式儲存)的過程就叫做隱式迭代

簡單理解:給匹配到的所有元素進行迴圈遍歷,執行相應的方法,而不用我們在進行迴圈,簡化我們的操作,方便我們呼叫

3、 jQuery 篩選選擇器

語法 用法 描述
:first $("li:first"); 獲取第一個 li 元素
:last $("li:last"); 獲取最後一個 li 元素
:eq(index) $("li:eq(2)"); 獲取到的 li 元素中,選擇索引號為 2 的元素,索引號從 0 開始
:odd $("li:odd"); 獲取到的 li 元素中,選擇索引號為奇數的元素
:even $("li:even"); 獲取到的 li 元素中,選擇索引號為偶數的元素

4、 jQuery 篩選方法

語法 用法 說明
parent() $("li").parent(); 查詢父級
children(selector) $("ul").children("li"); 查詢最近一級(親兒子)子代選擇器
find(selector) $("ol").find("li"); 相當於後代選擇器
siblings(selector) $(".first").siblings("li"); 查詢兄弟節點,不包括自己本身
nextAll([expr]) $(".first").nextAll(); 查詢當前元素之後所有的同輩元素
prevtAll([expr]) $(".last").prevtAll(); 查詢當前元素之前所有的同級元素
hasClass(class) $("div").hasClass("protected"); 檢查當前元素是否有某個特定的類
eq(index) $("li").eq(2); 獲取到的 li 元素中,選擇索引號為 2 的元素,索引號從 0 開始

index(): 獲取索引號

parents("選擇器"):選擇符合條件的祖先元素

5、 jQuery 裡面的排他思想

想要多選一的效果,排他思想:當前元素設定樣式,其餘的兄弟元素清除樣式

$(function () {
    // 隱式迭代,給所有的按鈕都繫結了點選事件
    $("li").click(function () {
        // 當前的元素樣式改變
        $(this).css("background", "pink");
        // 其餘兄弟去掉背景顏色
        $(this).siblings("li").css("background", "");
    });
});

6、 鏈式程式設計

鏈式程式設計是為了節省程式碼量,看起來更優雅

$(function () {
    $("li").click(function () {
        $(this).css("background", "pink").siblings().css("background", "");
    });
});

即重複的程式碼可以省略,直接寫在第一行程式碼後面

四、 jQuery 樣式操作

1、 操作 CSS 方法

jQuery 可以使用 CSS 方法來修改簡單元素樣式;也可以操作類,修改多個樣式

  1. 引數只寫屬性名,則是返回屬性值

    $(this).css("color");
    
  2. 引數是 (屬性名, 屬性值) 中間用逗號分割,是設定一組樣式,屬性必須加引號,值如果是數字可以不用加單位和引號

    $("div").css("width", "300px");
    
  3. 引數可以是物件形式,方便設定多組樣式,屬性名和屬性值用冒號隔開,屬性名可以不用加引號

    $(this).css({"width": "20px", "background-color": "red"});
    

    如果是符合屬性則必須採用駝峰命名法,如果屬性值不是數字,則必須加引號

2、 設定類樣式方法

作用等同於 classList,可以操作樣式,注意操作類裡面的引數不要加點

  1. 新增類

    $("div").addClass("current");  // 注意不要新增 .
    
  2. 刪除類

    $("div").removeClass("current");  // 注意不要新增 .
    
  3. 切換類

    $("div").toggleClass("current");  // 如果沒有這個類就新增,有就刪除這個類
    

3、 JQuery 類操作和 className 區別

原生 JS 中 className 會覆蓋元素原先裡面的類名

jQuery 裡面類操作只是對指定類進行操作,不影響原先的類名

五、 jQuery 效果

jQuery 給我們封裝了很多動畫效果,最為常見的如下:

1、 顯示和隱藏

show();  // 顯示
hide();  // 隱藏
toggle();  // 反轉

1.1 語法規範

show([speed, [easing], [fn]]);

引數:

  • 引數都可以省略,無動畫直接顯示
  • speed:三種預定速度之一的字串(slow,normal,fast)或表示動畫時長的毫秒數值
  • easing:用來指定切換效果,預設是 swing,可用引數 linear
  • fn:回撥函式,在動畫完成時執行的函式,每個元素執行一次

2、 滑動

slideDown();  // 下拉
slideUp();  // 上拉
slideToggle();  // 反轉

2.1 語法規範

slideDown([speed, [easing], [fn]]);

引數:

  • 引數都可以省略,無動畫直接顯示
  • speed:三種預定速度之一的字串(slow,normal,fast)或表示動畫時長的毫秒數值
  • easing:用來指定切換效果,預設是 swing,可用引數 linear
  • fn:回撥函式,在動畫完成時執行的函式,每個元素執行一次

3、 淡入淡出

fadeIn();  // 淡入以隱藏的元素
fadeOut();
fadeToggle();
fadeTo();

3.1 語法規範

fadeIn([speed, [easing], [fn]]);
// 引數和滑動的引數類似,注意fadeTo
fadeTo([speed], opacity, [easing], [fn]);  // opacity:修改不透明度

4、 自定義動畫

animate(params, [speed], [easing], [fn]);

引數:

  • params:想要修改的樣式屬性,以物件形式傳遞,必須寫。屬性名可以不帶引號,如果是複合屬性,則需要採取駝峰命名法。其餘引數可以省略
  • speed:三種預定速度之一的字串(slow,normal,fast)或表示動畫時長的毫秒數值
  • easing:用來指定切換效果,預設是 swing,可用引數 linear
  • fn:回撥函式,在動畫完成時執行的函式,每個元素執行一次
<div></div>
<script>
    $(function () {
    $("div").click(function(){
        $("div").animate({
            left: 500,
            top: 200,
            opacity: 0.6,
        }, 500, 'linear', function () {
            alert("移動完成")
        });
    });
});
</script>

5、 事件切換

hover([over, ], out)

如果只寫一個函式,那麼滑鼠經過和滑鼠離開都會觸發這個函式

引數:

  • over:滑鼠移動到元素上要觸發的函式(相當於 mouseenter)
  • out:滑鼠移出元素要觸發的函式(相當於 mouseleave)
$(".nav>li").hover(function () {
    // 滑鼠經過
    $(this).children("ul").slideDown(200);
}, function () {
    // 滑鼠離開
    $(this).children("ul").slideUp(200);
});
// 也可以寫成
$(".nav>li").hover(function () {
    $(this).children("ul").slideToggle(200);
});

6、 動畫佇列及其停止排隊方法

6.1 動畫或效果佇列

動畫或者效果佇列一旦觸發執行,如果多次觸發,就造成對個動畫或者效果排隊執行

6.2 停止排隊

stop();
  1. stop 方法用於停止動畫或效果
  2. 注意:stop 寫到動畫或者效果的前面,相當於停止結束上一次動畫
$(".nav>li").hover(function () {
    $(this).children("ul").stop().slideToggle(200);
});  // 寫在動畫前面,相當於停止結束上一次動畫

六、 jQuery 屬性操作

1、 元素固有的屬性

所謂元素固有屬性就是元素本身自帶的屬性,比如 a 標籤裡面的 href

1.1 獲取屬性值

element.prop("attr");

1.2 設定屬性值

element.prop("attr", "val");
<input type="checkbox" name="" id="">
<script>
    $(
        function () {
            $("input").change(function () {  // 當核取方塊裡面的值改變的時候
                console.log($("input").prop("checked"));
                $("input").prop("checked", "true");
            })  
        }
    )
</script>

2、 元素自定義屬性

2.1 獲取屬性值

element.attr("attrName");

2.2 設定屬性值

element.attr("attrName", "val");

其也可以修改 h5 自定義屬性

3、 資料快取

elemen
t.data();

data 方法可以在指定的元素上存取資料,並不會修改 DOM 元素結構;一旦頁面重新整理,之前存放的資料都將被移除

<span></span>
<script>
    $(function() {
        $("span").data("uname", "andy");
        console.log($("span").data("uname"));
    })
</script>

獲取 h5 自定義屬性 data-index 時,第一個屬性不需要寫 data-,其餘返回的是數字型

<span data-index = "1"></span>
<script>
    $(function() {
        console.log($("span").data("index"));
    })
</script>

七、 jQuery 元素內容

主要針對元素的內容還有表單的值操作

1、 普通元素內容

html();  // 獲取元素的內容,相當於原生的 innerHTML;
html("content");  // 設定元素內容

2、 元素文字內容

text();  // 相當於原生的 innerText;
text("content");  // 修改文字內容

3、 設定表單值

val();  // 獲取表單的值,相當於原生的 value;
val("content");  // 設定表單值
var num = 1.35555;
console.log(num.toFixed(2));  // 保留兩位小數

八、 jQuery 元素操作

主要是遍歷、建立、新增、刪除元素操作

1、 遍歷元素

jQuery 隱式迭代是對同一類元素做了同樣的操作,如果想要給同一類元素做不同操作,就需要用到遍歷

語法1

$("div").each(function (index, demoEle) { });
var arr = ["red", "green", 'pink'];
$("div").each(function (index, demoEle) {
    // 第一個引數一定是索引號,名稱可以是 i
    // 第二個引數是 DOM 物件,其沒有 jQuery 方法
    $(demoEle).css("color", arr[index]);
});

each()方法遍歷匹配每一個元素,主要用 DOM 處理

引數:

  • index:每個元素的索引號

  • demEle:每個 DOM 元素物件,不是 jQuery 物件

    所以,想要使用 jQuery 方法,需要給這個 DOM 元素轉換為 jQuery 物件 $(demoEle)

語法2

$.each($("div"), function(index, demoEle) {});
// 遍歷元素,主要用於遍歷資料,處理資料

第一個引數,可以傳入物件、陣列和元素等

2、 建立元素

語法

var li = $("<li>我是建立的元素</li>");  // 動態建立一個 li 標籤

3、 新增元素

3.1 內部新增

語法

$("ul").append(li);  // 將建立的 li 標籤放入 ul 裡面
$("ul").prepend(li);  // 內部新增並且放到內容的最前面

append 方法,把內容放入匹配元素內部最後面,類似於原生的 appendChild

3.2 外部新增

語法

element.after("content");  // 把內容放到目標元素的後面
element.before("content");  // 把內容放入目標元素前面

外部新增元素是兄弟關係;內部新增關係是父子關係

4、 刪除元素

element.remove();  // 刪除匹配元素(本身)
element.empty();  // 刪除匹配元素集合中所有的節點,不刪除本身
element.html("");  // 清空匹配的元素裡面的位元組點,不刪除本身

九、 jQuery 尺寸、位置操作

1、 jQuery 尺寸

語法 用法
windth() / height() 取得匹配元素寬度和高度值,只算 width / height
innerWidth() / innerHeight() 取得匹配元素寬度和高度值,包含 padding
outerWidth() / outerHeight() 取得匹配元素寬度和高度值,包含 padding、border
outerWidth(true) / outerHeight(true) 取得匹配元素寬度和高度值,包含 padding、border、margin

以上寬度為空,則是獲取相應值,返回數字型別

如果引數為數字,則是修改相應值

引數不用寫單位

2、 jQuery 位置

位置主要有三個:offset() / position() / scrollTop() / scrollLeft()

2.1 offset

設定偏移量或獲取元素偏移

  1. offset 方法設定或返回被選元素相對於文件的偏移座標,跟父級沒有關係
  2. 該方法有兩個屬性:left 和 top 用於獲取距離文件頂部的距離
  3. 可以設定元素的偏移:offset({top: 20, left: 30})

2.2 position

獲取元素位移

  1. position 方法用於返回被選元素相對於帶有定位的父級偏移座標,如果父級都沒有定位,則以文件為準
  2. 其只能獲取距離,不能設定偏移量

2.3 scroll

設定或獲取元素被捲去的頭部和左側

  1. scrollTop 方法設定或返回被選定元素被捲去的頭部

    $(function () {
        $(window).scroll(function () {
            console.log($(document).scrollTop());  // 得到被捲去頭部的距離,如果裡面傳值,就可以設定位置
        });
    });
    // 返回頂部
    $("body, html").stop().animate({  // 注意不能使用文件做動畫,而是元素做動畫
        scrollTop: 0,  
    });
    
  2. scroll 物件的到元素距離頭部的距離

十、 jQuery 事件

1、 jQuery 事件註冊

1.1 單個事件

element.條件(function () {事件處理程式});

1.2 事件處理

on() 方法在匹配元素上繫結一個或多個事件的事件處理函式

element.on(events, [sleector], fn);

引數:

  • events:一個或多個事件,如果事件函式相同用空格分開的事件型別
  • selector:元素的子元素選擇器
  • fn:回撥函式,即繫結在元素身上的監聽函式
$("div").on({
    mouseenter: function () {
        $(this).css("backgroundColor", "red");
    },
    click: function() {
        $(this).css("backgroundColor", "pink");
    }
});  // 事件函式不相同
$("div").on("mouseenter mouseleave", function () {
    $(this).toggleClass(".nav");
})  // 事件函式一樣

on() 方法優勢

  1. 可以繫結多個事件

  2. 可以事件委派事件,事件委派的定義就是,把原來加給子元素身上的事件繫結在父元素身上,就是把事件委派給元素

    $("div").on("click", "li", function () {
    	alert(11); 
    });  // click 是繫結在 ul 身上的,但是觸發的物件是 ul 裡面的小 li
    
  3. 動態建立元素,click 沒有辦法繫結事件,on 可以給未來生成的元素繫結事件

2、 jQuery 事件解綁

利用 off 解綁事件

$("div").off();  // 解除 div 裡面繫結的所有事件
$("div").off("click", function () {});  // 解除點選事件,後面還可以新增監聽函式
$("ul").off("click", "li");  // 解除事件委託

如果有的事情只想發生一次,可以使用 one() 來繫結事件

3、 jQuery 自動觸發事件

trigger();

有些事情希望自動觸發,比如輪播圖自動播放功能跟點選右側按鈕一致,可以利用定時器自動觸發右側按鈕點選事件,不必滑鼠觸發

$("div").on("click", function () {
    alert(11);
});  
// 自動觸發事件
// 1. 元素.事件();該事件會觸發元素的預設行為
$("div").click();
// 2. 元素.trigger("事件");該事件會觸發元素的預設行為
$("div").trigger("click");
// 3. triggerHandler("事件");,該事件不會觸發元素的預設行為
$("div").triggerHandler("click");

3、 jQuery 事件物件

事件被觸發,就會有事件物件產生

element.on(events, [selector], function (event) {});

十一、 jQuery 其他方法

1、 jQuery 拷貝物件

如果想要把某個物件拷貝(合併)給另外一個物件使用,此時可以使用 $.extend() 方法

語法

$.extend([deep], target, object1, [object2]);

引數:

  • deep:如果為 true 為深拷貝,預設為淺拷貝
  • target:要拷貝的目標物件
    • 淺拷貝是把拷貝的物件複雜資料型別中的地址拷貝給目標物件,修改目標物件會影響被拷貝物件
    • 深拷貝,前面加 true,完全克隆(拷貝的物件,而不是地址),修改目標物件不會影響被拷貝物件
      • 把裡面的資料完全複製一份給目標物件,如果裡面有不衝突的屬性,會合併到一起
  • object1:待拷貝到第一個物件的物件
$(function () {
    var to = {
        id: 0,
        name: "Make",
    };
    var obj = {
        id: 1,
        name: "Andy",
    };  // 會覆蓋 to 原來的資料
    $.extend(to, obj);
});

2、 jQuery 多庫共存

問題概述:

jQuery 使用 $ 作為識別符號,隨著 jQuery 的流行,其他 JS 庫也會用這 $ 作為識別符號,這樣一起使用會引起衝突

客觀需求:

需要一個解決方案,讓 jQuery 和其他庫 JS 庫不存在衝突,可以同時存在,這就叫做多庫共存

jQuery 解決方案:

  1. 把裡面的 $ 符號統一改為 jQuery,比如:jQuery("div");

  2. jQuery 變數規定新的名稱:$.noConflict()

    var otherName = $.noConflict();  // 讓 jQuery 釋放對 $ 的控制權,讓使用者自己決定
    

3、 jQuery 外掛

jQuery 功能比較有限,想要更復雜的特效效果,可以藉助於 jQuery 外掛完成

注意:這些外掛也是依賴於 jQuery 來完成的,所以必須要先引入 jQuery 檔案,因此也稱為 jQuery 外掛

jQuery 外掛常用的網站:

  1. jQuery 之家
  2. jQuery 外掛庫

jQuery 外掛使用步驟:

  1. 引入相關檔案(jQuery 和 外掛檔案)
  2. 複製相關 HTML、CSS、JS (呼叫外掛)

4、 圖片懶載入

圖片懶載入(圖片使用延遲載入,可提高網頁下載速度,它也能幫助減輕伺服器負載)

當我們頁面滑動到可視區域,再顯示圖片

我們使用 jQuery 外掛庫 EasyLazyload

5、 全域性滾動

外掛地址:https://www.dowebok.com/demo/2014/77/