jQuery筆記整理教程(常用的API和基礎)

FredLiu發表於2021-04-15

這篇文章是我在學習黑馬課程做下的筆記,經常在忘記知識點的時候拿出來看看,基本包括了你需要了解的jQuery知識

1.jQuery入門

1.概述

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

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

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

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

常見的JavaScript庫:jQuery、Prototype、YUI、Dojo、Ext JS、移動端的zepto。這些庫都是對原生JavaScript的封裝,內部都是用JavaScript實現的,我們主要學習的是jQuery。

優點:

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

2.基本使用

https://jquery.com/

https://api.jquery.com/

各個版本的下載:https://code.jquery.com/

開發版(保留了語法)和壓縮版

image.png

1.jQuery的入口函式

$(function(){
    ...//此處是頁面DOM載入完成的入口
});
$(document).ready(function(){
    ...//此處是1頁面DOM載入完成的入口
})
  1. 等著DOM結構渲染完畢即可執行內部程式碼,不必等到所有外部資源載入完成,jQuery幫我們完成了封裝。
  2. 相當於原生js 中的 DOMContentLoaded。
  3. 不同於原生js 中的 load事件是等頁面文件、外部的js檔案、css檔案、圖片載入完畢才執行內部程式碼。

2.jQuery的頂級物件$

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

3.jQuery物件和DOM物件

  1. 用原生JS獲取來的物件就是 DOM物件
  2. jQuery方法獲取的元素就是jQuery物件。
  3. jQuery物件本質是∶利用$對DOM物件包裝後產生的物件(偽陣列形式儲存)。
//    1.DOM物件
var myDiv = document.querySelector('div');//myDiv就是DOM物件
// 2.jQuery物件
$('div');
// 3.jQuery物件只能用jQuery方法,DOM也只能用原生js的屬性方法

DOM物件與jQuery物件之間是可以相互轉換的。

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

1.DOM轉為JQuery物件:$(DOM物件)

$('div')

2.jQuery物件轉換為DOM物件(兩種方式)

$('div')[index]   index是索引號

$('div').get(index)    index是索引號
<video src="mov.mp4" muted></video>
<script>
    // 1. DOM物件轉換為 jQuery物件
    // (1) 我們直接獲取影片,得到就是jQuery物件
    // $('video');
    // (2) 我們已經使用原生js 獲取過來 DOM物件
    var myvideo = document.querySelector('video');
    // $(myvideo).play();  jquery裡面沒有play 這個方法
    // 2.  jQuery物件轉換為DOM物件
    // myvideo.play();
    $('video')[0].play()
    $('video').get(0).play()
</script>

2.常用API

1.jQuery選擇器

原生JS獲取元素方式很多,很雜,而且相容性情況不一致,因此jQuery給我們做了封裝,使獲取元素統一標準。

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

1.隱式迭代(重要)

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

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

<div>驚喜不,意外不</div>
<div>驚喜不,意外不</div>
<div>驚喜不,意外不</div>
<div>驚喜不,意外不</div>
<ul>
    <li>相同的操作</li>
    <li>相同的操作</li>
    <li>相同的操作</li>
</ul>
<script>
    // 1. 獲取四個div元素 
    console.log($("div"));

    // 2. 給四個div設定背景顏色為粉色 jquery物件不能使用style
    $("div").css("background", "pink");
    // 3. 隱式迭代就是把匹配的所有元素內部進行遍歷迴圈,給每一個元素新增css這個方法
    $("ul li").css("color", "red");
</script>

案例:下拉選單

2.jQuery篩選選擇器

image.png

$(function() {
        $("ul li:first").css("color", "red");
        $("ul li:eq(2)").css("color", "blue");
        $("ol li:odd").css("color", "skyblue");
        $("ol li:even").css("color", "pink");
    })

image.png

<div class="yeye">
    <div class="father">
        <div class="son">兒子</div>
    </div>
</div>

<div class="nav">
    <p>我是屁</p>
    <div>
        <p>我是p</p>
    </div>
</div>
<script>
    // 注意一下都是方法 帶括號
    $(function() {
        // 1. 父  parent()  返回的是 最近一級的父級元素 親爸爸
        console.log($(".son").parent());
        //如果有多個父級可以用parents()
        $("div").parents(".one");
        // 2. 子
        // (1) 親兒子 children()  類似子代選擇器  ul>li
        $(".nav").children("p").css("color", "red");
        // (2) 可以選裡面所有的孩子 包括兒子和孫子  find() 類似於後代選擇器
        $(".nav").find("p").css("color", "red");
        // 3. 兄
    });
    <ol>
        <li>我是ol 的li</li>
        <li>我是ol 的li</li>
        <li class="item">我是ol 的li</li>
        <li>我是ol 的li</li>
        <li>我是ol 的li</li>
        <li>我是ol 的li</li>
    </ol>
    <ul>
        <li>我是ol 的li</li>
        <li>我是ol 的li</li>
        <li>我是ol 的li</li>
        <li>我是ol 的li</li>
        <li>我是ol 的li</li>
        <li>我是ol 的li</li>
    </ul>
    <div class="current">俺有current</div>
    <div>俺木有current</div>
<script>
    // 注意一下都是方法 帶括號
$(function() {
    // 1. 兄弟元素siblings 除了自身元素之外的所有親兄弟
    $("ol .item").siblings("li").css("color", "red");
    // 2. 第n個元素
    var index = 2;
    // (1) 我們可以利用選擇器的方式選擇
     $("ul li:eq(2)").css("color", "blue");
   // $("ul li:eq(index)").css("color", "blue");
    // (2) 我們可以利用選擇方法的方式選擇 更推薦這種寫法
    $("ul li").eq(2).css("color", "blue");
     //$("ul li").eq(index).css("color", "blue");
    // 3. 判斷是否有某個類名
    console.log($("div:first").hasClass("current"));//true
    console.log($("div:last").hasClass("current"));//false 
});
</script>
重點記住: parent() children() find() siblings() eq()

3.jQuery的排他思想

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

案例:淘寶服飾

4.jQuery的鏈式程式設計

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

$(this).css("color","red").siblings().css("color","");//我的顏色是紅色,兄弟節點顏色為空

$(this).siblings().css("color","red");//兄弟變色,我不變

$(this).siblings().parent().css("color","blue");//兄弟的父親變色

2.jQuery樣式操作

1.操作CSS方法

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

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

$(this).css("color");

2.引數是屬性名,屬性值,逗號分隔,是設定一組樣式,屬性必須加媽號,值如果是數字可以不用跟單位和引號

$(this).css("color","red");

3.引數可以是物件形式,方便設定多組樣式。屬性名和屬性值用冒號隔開,屬性可以不用加引號,

$(this).css({
    "color":"white",
    "font-size":"20px"
})
// 操作樣式之css方法
$(function() {
    console.log($("div").css("width"));
    $("div").css("width", "300px");
    $("div").css("width", 300);
    $("div").css(height, "300px"); //屬性名一定要加引號
    $("div").css({
        width: 400,
        height: 400,
        backgroundColor: "red"
            // 如果是複合屬性則必須採取駝峰命名法,如果值不是數字,則需要加引號
    })
})

2.設定類樣式方法

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

$("div").addClass("current"); //新增類

$("div").removeClass("current"); //刪除類

$("div").toggleClass("current");//切換類

3.類操作和className的區別

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

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

// var one = document.querySelector(".one");
// one.className = "two";   會覆蓋以前的類名
// $(".one").addClass("two");  這個addClass相當於追加類名 不影響以前的類名
$(".one").removeClass("two");

3.jQuery效果

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

https://jquery.cuishifeng.cn/

image.png

1.顯示隱藏效果

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

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

toggle([speed],[easing],[fn]) ;
  1. 引數都可以省略,無動畫直接顯示。
  2. speed :三種預定速度之一的字串(“slow”,"normal",or “fast”)或表示動畫時長的毫秒數值(如:1000)。
  3. easing : (Optional)用來指定切換效果,預設是“swing”,可用引數“linear”(勻速)。
  4. fn:回撥函式,在動畫完成時執行的函式,每個元素執行一次。
一般不加引數,因為動畫醜

2.滑動效果

slideDown([speed],[easing],[fn]) ); //下滑
slideUp([speed],[easing],[fn]) ; //上滑
slideToggle([speed],[easing],[fn]) ;//切斷 
//例子
$("button").eq(2).click(function() {
    // 滑動切換 slideToggle()
    $("div").slideToggle(500);
}); 

3.事件切換

hover([over],out)

over:滑鼠移到元素上要觸發的函式(相當於mouseenter)

out:滑鼠移出元素要觸發的函式(相當於mouseleave)

    $(function() {
    // 滑鼠經過
    // $(".nav>li").mouseover(function() {
    //     // $(this) jQuery 當前元素  this不要加引號
    //     // show() 顯示元素  hide() 隱藏元素
    //     $(this).children("ul").slideDown(200);
    // });
    // // 滑鼠離開
    // $(".nav>li").mouseout(function() {
    //     $(this).children("ul").slideUp(200);
    // });
    
    // 1. 事件切換 hover 就是滑鼠經過和離開的複合寫法
    // $(".nav>li").hover(function() {
    //     $(this).children("ul").slideDown(200);
    // }, function() {
    //     $(this).children("ul").slideUp(200);
    // });
    
    // 2. 事件切換 hover  如果只寫一個函式,那麼滑鼠經過和滑鼠離開都會觸發這個函式
    $(".nav>li").hover(function() {
        $(this).children("ul").slideToggle();
    });
})

4.動畫佇列及其停止排隊方法

1.動畫或者效果佇列

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

2.停止排隊

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

5.淡入淡出效果

fadeIn([speed],[easing],[fn]) 
fadeOut([speed],[easing],[fn]) 
fadeToggle([speed],[easing],[fn]) 

1.漸進方式調整到指定的不透明度

fadeTo([speed],opacity,[easing],[fn]) //修改不透明度

//opacity透明度必須寫,取值0~1之間。

案例3:高亮顯示

6.自定義動畫animate

animate(params,[speed],[easing],[fn])
params:想要更改的樣式屬性,以物件形式傳遞,必須寫。屬性名可以不用帶引號,如果是複合屬性則需要採取駝峰命名法borderLeft。其餘引數都可以省略。

案例:王者榮耀手風琴效果

4.jQuery屬性操作

1.設定或獲取元素固有屬性值 prop()

所謂元素固有屬性就是元素本身自帶的屬性,比如元素裡面的href,比如<input>元素裡面的type。

prop("屬性")  //獲取屬性

prop("屬性","屬性值")  //設定屬性

2.設定獲取元素自定義屬性值 attr()

使用者自己給元素新增的屬性,我們稱為自定義屬性。比如給div新增index = “1”。

attr("屬性")  //類似原生getAttribute()

attr("屬性","屬性值")  //類似原生setAttribute()
改方法也可以獲取H5自定義屬性

3.資料快取data()

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

data("name","value")  //向被選元素附加資料

data("name")  //向被選元素獲取資料
同時,還可以讀取HTML5自定義屬性data-index,得到的是數字型
<a href="http://www.itcast.cn" title="都挺好">都挺好</a>
<input type="checkbox" name="" id="" checked>
<div index="1" data-index="2">我是div</div>
<span>123</span>
<script>
$(function() {
    //1. element.prop("屬性名") 獲取元素固有的屬性值
    console.log($("a").prop("href"));
    $("a").prop("title", "我們都挺好");
    $("input").change(function() {
        console.log($(this).prop("checked"));
    });
    // console.log($("div").prop("index"));
    // 2. 元素的自定義屬性 我們透過 attr()
    console.log($("div").attr("index"));
    $("div").attr("index", 4);
    console.log($("div").attr("data-index"));
    // 3. 資料快取 data() 這個裡面的資料是存放在元素的記憶體裡面
    $("span").data("uname", "andy");
    console.log($("span").data("uname"));
    // 這個方法獲取data-index h5自定義屬性 第一個 不用寫data-  而且返回的是數字型
    console.log($("div").data("index"));
})
</script>

5.jQuery文字屬性值

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

1.普通元素內容htm() (相當於原生innerHTML)
html()  //獲取元素內容
html("內容")  //設定元素內容

2.普通元素文字內容text()  (相當於原生innerText)
text()
text("內容")

3.表單的val() (相當於原生value)
val()
val("內容")

toFixed(2):保留兩位小數

var price = (a*b).toFixed(2);

6.jQuery元素操作

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

1.遍歷元素

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

$("div").each(function(index,doEle){xxx});

1.each0方法遍歷匹配的每一個元素。主要用DOM處理。each每一個

2.裡面的回撥函式有2個引數:index是每個元素的索引號; demEle是每個DOM元素物件,不是jquery物件

<div>1</div>
<div>2</div>
<div>3</div>
<script>
    $(function() {
        // $("div").css("color", "red");
        // 如果針對於同一類元素做不同操作,需要用到遍歷元素(類似for,但是比for強大)
        var sum = 0;
        // 1. each() 方法遍歷元素 
        var arr = ["red", "green", "blue"];
        $("div").each(function(i, domEle) {
            // 回撥函式第一個引數一定是索引號  可以自己指定索引號號名稱
            // console.log(index);
            // console.log(i);
            // 回撥函式第二個引數一定是 dom元素物件 也是自己命名
            // console.log(domEle);
            // domEle.css("color"); dom物件沒有css方法
            $(domEle).css("color", arr[i]);
            sum += parseInt($(domEle).text());//把字串轉成整數    
        })
        console.log(sum);
        // 2. $.each() 方法遍歷元素 主要用於遍歷資料,處理資料
         $.each($("div"), function(i, ele) {
        //     console.log(i);
        //     console.log(ele);
        // });
         $.each(arr, function(i, ele) {
        //     console.log(i);
        //     console.log(ele);
        // })
        $.each({
            name: "andy",
            age: 18
        }, function(i, ele) {
            console.log(i); // 輸出的是 name age 屬性名
            console.log(ele); // 輸出的是 andy  18 屬性值
        })
    })
</script>

2.元素的生成

$("<li></li>"); //建立元素

<!--1.內部新增-->
element.append("內容")  //內部新增,放入後面,類似appendChild
element.prepend("內容");//內部新增,放入前面

<!--2.外部新增-->
element.after("內容");  // 把內容放入目標元素前面
element.before("內容"); // 把內容放入目標元素後面

<!--3.刪除元素-->
element.remove()  //刪除匹配的元素(本身)
element.empty()  //刪除匹配的元素集合中所有的子節點
element.html("")  //可以刪除匹配的元素集合中所有的子節點 清空匹配的內容

內部新增元素,生成之後,它們是父子關係。

外部新增元素,生成之後,他們是兄弟關係。

7.jQuery事件操作

1.單個事件註冊

element.事件(function(){})

$("div").click(funciton(){事件處理程式}) 

其他事件和原生基本一致

比如mouseover、mouseou、blur、focus、change、keydown、keyup、resize、scroll等

2.事件處理on()繫結事件

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

element.on(events,[selector],fn)
  1. events:—個或多個用空格分隔的事件型別,"click"或"keydown”
  2. selector:元素的子元素選擇器。
  3. fn:回撥函式即繫結在元素身上的偵聽函式。

$("div").on({
    mouseenter: function () {
        $(this).css("backgroundColor", "blue");
    },
    click: function () {
        $(this).css("backgroundColor", "pink");
    },
    mouseleave: function () {
        $(this).css("backgroundColor", "green");
    }
})
<!--第2種-->
$("div").on("mouseover mouseleave", function () {
    $(this).toggleClass("current");
})

on()方法優勢2∶

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

$("div").on("mouseover mouseleave", function () {
    $(this).toggleClass("current");
})

// ul有click事件,但是點的是li,會冒泡到父級ul,執行click事件
$("ul").on("click","li",function(){
    alert('hello world');
});

// (3) on可以給未來動態建立的元素繫結事件
// $("ol li").click(function() {
//     alert(11);
// })
$("ol").on("click", "li", function() {
    alert(11);
})
var li = $("<li>我是後來建立的</li>");
$("ol").append(li);

在此之前有bind), live( delegate()等方法來處理事件繫結或者事件委派,最新版本的請用on替代他們。

案例js程式碼:

image.png

$(function () {
    // 1.點選發布按鈕, 動態建立一個小li,放入文字框的內容和刪除按鈕, 並且新增到ul 中
    $(".btn").on("click", function () {
        var li = $("<li></li>");
        li.html($(".txt").val() + "<a href='javascript:;'> 刪除</a>");
        $("ul").prepend(li);
        li.slideDown();
        $(".txt").val("");
    })

    // 2.點選的刪除按鈕,可以刪除當前的微博留言li
    // $("ul a").click(function() {  // 此時的click不能給動態建立的a新增事件
    //     alert(11);
    // })
    // on可以給動態建立的元素繫結事件
    $("ul").on("click", "a", function () {
        $(this).parent().slideUp(function () {
            $(this).remove();
        });
    })
})

3.事件處理off()解綁事件

off(方法可以移除透過on()方法新增的事件處理程式。

$("p").off()    //解綁p元素所在事件處理程式
$("p").off("click")   //解綁p元素上的點選事件
$("ul").off("click","li");  //解綁事件委託
<script>
    $(function() {
        $("div").on({
            click: function() {
                console.log("我點選了");
            },
            mouseover: function() {
                console.log('我滑鼠經過了');
            }
        });
        $("ul").on("click", "li", function() {
            alert(11);
        });
        // 1. 事件解綁 off 
        // $("div").off();  // 這個是解除了div身上的所有事件
        $("div").off("click"); // 這個是解除了div身上的點選事件
        $("ul").off("click", "li");
        // 2. one() 但是它只能觸發事件一次
        $("p").one("click", function() {
            alert(11);
        })
    })
</script>
</head>

<body>
<div></div>
<ul>
    <li>我們都是好孩子</li>
    <li>我們都是好孩子</li>
    <li>我們都是好孩子</li>
</ul>
<p>我是屁</p>
</body>

4.自動觸發時間trigger()

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

element.click() //第一種簡寫模式

element.trigger("type") //第二種自動觸發模式

$("p").on("click",function(){
    alert("hi");
});
$("p").trigger("click"); //此時自動觸發點選事件,不需要滑鼠點選

element.triggerHander();
$("div").on("click", function () {
    alert(11);
});
// 自動觸發事件
// 1. 元素.事件()
 $("div").click();//會觸發元素的預設行為
// 2. 元素.trigger("事件")
$("div").trigger("click");//會觸發元素的預設行為
$("input").trigger("focus");
// 3. 元素.triggerHandler("事件") 就是不會觸發元素的預設行為
$("div").triggerHandler("click");
$("input").on("focus", function () {
    $(this).val("你好嗎");
});
 $("input").triggerHandler("focus");

5.jQurey事件物件

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

阻止預設行為:event.preventDefaultreturn false

阻止冒泡:event.stopPropagation

$(function() {
    $(document).on("click", function() {
        console.log("點選了document");

    })
    $("div").on("click", function(event) {
        // console.log(event);
        console.log("點選了div");
        event.stopPropagation();//阻止事件冒泡
    })
})

8.jQuery尺寸、位置操作

1.尺寸

image.png

  • 以上引數為空,則是獲取相應值,返回的是數字型。
  • 如果引數為數字,則是修改相應值。
  • 引數可以不寫單位

2.位置

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

==offset()==

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

==positon()==

position(方法用於返回被選元素相對於帶有定位的父級偏移座標,如果父級都沒有定位,則以文件為準。

==scrollTop()/scrollLeft()==

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

jQuery其他方法

1.jQuery複製物件

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

$.extend([deep],target,object1,[objectN])
  1. deep:如果設為true為深複製,預設為false淺複製
  2. target:要複製的目標物件
  3. object1:待複製到第一個物件的物件。
  4. objectN:待複製到第N個物件的物件。
  5. 淺複製是把被複製的物件複雜資料型別中的地址複製給目標物件,修改目標物件會影響被複製物件。
  6. 深複製,前面加true,完全克隆(複製的物件,而不是地址),修改目標物件不會影響被複製物件
// 1.使用方法
var targetObj = {};
var obj = {
    id: 1,
    name: "andy"
};
// $.extend(target, obj);
$.extend(targetObj, obj);
console.log(targetObj); //Objext(id:1,name:"andy")

// 2.如果targetObj有資料
var targetObj = {
    id: 0
};
var obj = {
    id: 1,
    name: "andy"
};
// $.extend(target, obj);
$.extend(targetObj, obj);
console.log(targetObj); // 會覆蓋targetObj 裡面原來的資料Object(id:"1",name:"andy")

// 3.沒有的新增,有的覆蓋掉
var targetObj = {
    id: 0,
    msg: {
        sex: '男'
    }
};
var obj = {
    id: 1,
    name: "andy",
    msg: {
        age: 18
    }
};
// $.extend(target, obj);
$.extend(targetObj, obj);
console.log(targetObj); // 會覆蓋targetObj 裡面原來的資料

深複製和淺複製

淺複製只是複製了地址複製,如果修改targetObj的msg.name,obj的msg.name也會改變,因為他們對應同一個地址

 $.extend(targetObj, obj);

image.png

深複製,前面加true,完全克隆(複製的物件,而不是地址),修改目標物件不會影響被複製物件

$.extend(true, targetObj, obj);

image.png

2.多庫共存

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

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

解決方案:

image.png

$(function() {
    function $(ele) {
        return document.querySelector(ele);
    }
    console.log($("div"));
    // 1. 如果$ 符號衝突 我們就使用 jQuery
    jQuery.each();
    // 2. 讓jquery 釋放對$ 控制權 讓用自己決定
    var suibian = jQuery.noConflict();
    console.log(suibian("span"));
    suibian.each();
})

3.jQuery外掛

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

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

  1. jQuery外掛庫 http://www.jq22.com/
  2. jQuery之家 http://www.htmleaf.com/

jQuery外掛使用步驟:

1.引入相關檔案。(jQuery檔案和外掛檔案)

2.複製相關html、css、js(呼叫外掛)。

1.圖片懶載入

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

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

我們使用jquery外掛庫EasyLazyload。注意,此時的js引入檔案和js呼叫必須寫到DOM元素(圖片)最後面

2.全屏滾動(fullpage.js)

gitHub : https://github.com/alvarotrig...

中文翻譯網站:http://www.dowebok.com/demo/2...

在dist資料夾有引入檔案

3.bootstrap JS外掛

bootstrap框架也是依賴於jQuery開發的,因此裡面的js外掛使用,也必須引入jQuery檔案。

相關文章