jQuery入門筆記
一、jQuery 概述
1.1 JavaScript庫
JavaScript庫,即 library,是一個封裝好的特定的集合(方法和函式)。從封裝一大堆函式的角度理解庫,就是在這個庫中,封裝了很多預先定義好的函式在裡面,比如動畫 animate、hide、show,比如獲取元素等。
簡單理解:就是一個 JS 檔案,裡面對原生 js 程式碼進行了封裝,存放到裡面。這樣開發者可以快速高效的使用這些封裝好的功能了。
比如 jQuery,就是為了快速方便的操作 DOM,裡面基本都是函式(方法)。
常見的 JavaScript 庫
- jQuery
- Prototype
- YUI
- Dojo
- Ext JS
- 移動端的 zepto
這些庫都是對原生 JavaScript 的封裝,內部都是用 JavaScript 實現的。
1.2 jQuery 的概念
jQuery 是一個快速、簡潔的 JavaScript 庫,其設計的宗旨是“write Less, Do More”,即倡導寫更少的程式碼,做更多的事情。
- j:JavaScript
- Query:查詢 js,把 js 中的 DOM 操作做了封裝,開發者可以快速的查詢使用裡面的功能。
jQuery 封裝了 JavaScript 常用的功能程式碼,優化了 DOM 操作、事件處理、動畫設計和 Ajax 互動。
jQuery 出現的目的是加快前端人員的開發速度,提高開發效率。
1.3 jQuery 的優點
- 輕量級。核心檔案才幾十 kb,不會影響頁面載入速度
- 跨瀏覽器相容。基本相容了現在主流的瀏覽器
- 鏈式程式設計、隱式迭代
- 對事件、樣式、動畫支援,大大簡化了 DOM 操作
- 支援外掛擴充套件開發。有著豐富的第三方外掛,例如:樹形選單、日期控制元件、輪播圖等
- 免費、開源
二、jQuery 的基本使用
2.1 jQuery 的入口函式
兩種寫法:
$(function() {
// 此處是頁面 DOM 載入完成的入口
});
$(document).ready(function() {
// 此處是頁面 DOM 載入完成的入口
});
- 等著 DOM 結構渲染完畢即可執行內部程式碼,不必等到所有外部資源載入完成,jQuery 幫我們完成了封裝;
- 相當於原生 js 中的 DOMContentLoaded;
- 不同於原生 js 中的 load 事件是等頁面文件、外部的 js 檔案、css 檔案、圖片載入完畢才執行內部程式碼。
2.2 jQuery 的頂級物件
- $ 是 jQuery 的別稱,在程式碼中可以使用 jQuery 代替 $
- $ 是 jQuery 的頂級物件,相當於原生 JavaScript 的 window。把元素利用 $ 包裝成 jQuery 物件,就可以呼叫 jQuery 的方法。
// $(function() {
jQuery(function() {
//$('div').hide();
jQuery('div').hide();
})
2.3 jQuery 物件和 DOM 物件
- 使用原生 js 方法獲取的物件是 DOM 物件
- 使用 jQuery 方法獲取的物件是 jQuery 物件
- jQuery 物件本質是:利用 $ 對 DOM 物件包裝後產生的物件(偽陣列形式儲存)
- jQuery 物件只能使用 jQuery 方法,DOM 物件則使用原生的 JavaScript 屬性和方法。
// DOM 物件:用原生 js 獲取的物件
console.dir(document.querySelector('div'));
// jQuery 物件:用 jQuery 方法獲取的物件
console.dir($('div'));
document.querySelector('div').hide(); // 報錯
$('div').style.display = 'none'; // 報錯
DOM 物件和 jQuery 物件之間是可以相互轉換的。
因為原生 js 比 jQuery 更大,原生的一些屬性和方法 jQuery 沒有封裝,要想使用這些屬性和方法需要把 jQuery 物件轉換為 DOM 物件才能使用。
-
DOM 物件轉換成 jQuery 物件
$(DOM物件)
注意不要加引號
$('div'); // 使用原生 js 獲取 DOM 物件 var div = document.querySelector('div'); $(div);
-
jQuery 物件轉換為 DOM 物件
$('div')[index]
index 是索引號$('div').get(index)
index 是索引號
$('div')[0].style.display = 'none'; $('div').get(0).style.display = 'none';
三、jQuery 的 API
3.1 jQuery 選擇器
3.1.1 jQuery 基礎選擇器
原生 JS 獲取元素很多,很雜,而且相容性情況不一致,因此 jQuery 做了封裝,使獲取元素統一標準。
$('選擇器')
括號內的選擇器直接寫 CSS 選擇器,要加引號。
名稱 | 用法 | 描述 |
---|---|---|
ID選擇器 | $('#id') | 獲取指定 ID 的元素 |
全選選擇器 | $('*') | 匹配所有元素 |
類選擇器 | $('.class') | 獲取同一類 class 的元素 |
標籤選擇器 | $('div') | 獲取同一類標籤的所有元素 |
並集選擇器 | $('div,p,li') | 獲取多個元素 |
交集選擇器 | $('li.current') | 交集元素 |
3.1.2 jQuery 層級選擇器
名稱 | 用法 | 描述 |
---|---|---|
子代選擇器 | $('ul>li') | 使用右尖括號,獲取下一級的元素;注意:不能獲取更下層的元素 |
後代選擇器 | $('ul li') | 使用空格,代表後代選擇器,獲取 url 下的所有 li 元素 |
3.1.3 隱式迭代
遍歷內部 DOM 元素(偽陣列形式儲存)的過程就叫做隱式迭代。
簡單理解:給匹配到的所有元素進行迴圈遍歷,執行相應的方法,而不用開發者再進行迴圈,簡化開發者的操作,方便呼叫。
$('div').css('background', 'orange');
3.1.4 jQuery 篩選選擇器
名稱 | 用法 | 描述 |
---|---|---|
:first | $('li:first') | 獲取第一個 li 元素 |
:last | $('li:last') | 獲取最後一個 li 元素 |
:eq(index) | $('li:eq(2)') | 獲取到的 li 元素中,選擇索引號為 2 的元素,索引號 index 從 0 開始 |
:odd | $('li:odd') | 獲取到的 li 元素中,選擇索引號為奇數的元素 |
:even | $('li:even') | 獲取到的 li 元素中,選擇索引號為偶數的元素 |
3.1.5 jQuery 篩選方法
語法 | 用法 | 說明 |
---|---|---|
parent() | $('li').parent(); | 查詢最近一級的父級元素 |
children(selector) | $('ul').children('li') | 相當於 $('ul>li') 最近一級 |
find(selector) | $('ul').find('li') | 相當於 $('ul li') 所有下級 |
siblings(selector) | $('.first').siblings('li') | 查詢兄弟節點,不包括自己本身 |
nextAll([expr]) | $('.first').nextAll() | 查詢當前元素之後所有的同級元素 |
prevAll([expr]) | $('.last').prevAll() | 查詢當前元素之前所有的同級元素 |
hasClass(class) | $('div').hasClass('protected') | 檢查當前的元素是否含有某個特定的類,如果有,返回 true |
eq(index) | $('li').eq(2) | 相當於 $('li:eq(2)'),index 從 0 開始 |
$(function() {
// 滑鼠經過
$('.nav>li').mouseover(function() {
// $(this) 是 jQuery 當前元素
$(this).children('ul').show();
});
// 滑鼠離開
$('.nav>li').mouseout(function() {
$(this).children('ul').hide();
});
$('ol .item').siblings('li').css('color', 'red');
$('ul li').eq(2).css('color', 'skyblue');
$('div:first').hasClass('current');
})
3.1.6 jQuery 排他思想
$(function() {
// 1. 隱式迭代,給所有的按鈕都繫結點選事件
$('button').click(function() {
// 2. 當前元素的背景色
$(this).css('background', 'orange');
// 3. 隱式迭代,其餘的同級按鈕去掉背景色
$(this).siblings('button').css('background', '');
})
})
$(function() {
// 1. 滑鼠經過導航欄
$("#left li").mouseover(function() {
// 2. 得到當前 li 的索引號
var index = $(this).index();
// $("#content div").eq(index).show();
// $("#content div").eq(index).siblings().hide();
// 鏈式程式設計
$("#content div").eq(index).show().siblings().hide();
})
})
3.2 jQuery 樣式操作
3.2.1 操作 css 方法
jQuery 可以使用 css()
方法來修改簡單元素樣式;也可以操作類,修改多個樣式。
-
引數只寫屬性名,則返回屬性值
console.log($('div').css('width')); // 200px
-
引數是屬性名、數值、逗號分隔,是設定一組樣式;屬性必須加引號,值如果是數字可以不用跟單位和引號
$('div').css('width', '300px'); $('div').css('width', 300); // 正常
-
引數可以是物件形式,方便設定多組樣式。屬性名和屬性值用冒號分隔,屬性可以不用加引號,如果是複合屬性則必須採取駝峰命名法,如果屬性值不是數字,則不需要加引號。
$('div').css({ width: 300, height: 300, backgroundColor: 'red' });
3.2.2 設定類樣式方法
作用等同於原生 JS 的 classList,可以操作類樣式。注意操作類裡面的引數不要加點 .
。
-
新增類
$('div').addClass('current');
-
移除類
$('div').removeClass('current');
-
切換類
$('div').toggleClass('current');
3.3 jQuery 效果
jQuery 封裝了很多動畫效果,常見的有:
- 顯示隱藏
- show()
- hide()
- toggle()
- 滑動
- slideDown()
- slideUp()
- slideToggle()
- 淡入淡出
- fadeIn()
- fadeOut()
- fadeToggle()
- fadeTo()
- 自定義動畫
- animate()
3.3.1 顯示隱藏
語法規範
show([speed, [easing], [fn]])
hide([speed, [easing], [fn]])
toggle([speed, [easing], [fn]])
顯示引數
- 引數都可以省略,無動畫直接顯示
- speed:三種預定速度之一的字串或表示動畫時長的毫秒數值(如:1000)
- "slow"
- "normal"
- "fast"
- easing:用來指定切換效果,預設是“swing”,可用引數“linear”
- fn:回撥函式,在動畫完成時執行的函式,每個元素執行一次。
$('div').show(1000, function() {
})
$('div').hide("slow", function() {
})
3.3.2 事件切換
語法規則
hover([over,]out)
- over:滑鼠移到元素上要觸發的函式(相當於 mouseenter)
- out:滑鼠移出元素要出發的函式(相當於 mouseleave)
$(function() {
// 滑鼠經過
$('.nav>li').mouseover(function() {
$(this).children('ul').slideDown(200);
});
// 滑鼠經過
$('.nav>li').mouseout(function() {
$(this).children('ul').slideUp(200);
});
// 1. 事件切換:是滑鼠經過和離開的複合寫法
$('.nav>li').hover(function() {
$(this).children('ul').slideDown(200);
}, function() {
$(this).children('ul').slideUp(200);
});
// 2. 事件切換:如果只寫一個函式,那麼滑鼠經過和滑鼠離開都會觸發這個函式
$('.nav>li').hover(function() {
$(this).children('ul').slideToggle(200);
});
})
3.3.4 動畫佇列及其停止排隊方法
-
動畫或效果佇列
動畫或效果一旦觸發就會執行,如果多次觸發,就造成多個動畫或者效果排隊執行
-
停止排隊
stop()
$(".nav>li").hover(function() { // stop 方法寫在動畫的前面 $(this).children("ul").stop().slideToggle(200); });
3.3.3 淡入淡出效果
語法規則
fadeIn([speed, [easing], [fn]])
fadeOut([speed, [easing], [fn]])
fadeToggle([speed, [easing], [fn]])
fadeTo([speed, opacity, [easing], [fn]])
效果引數
- opacity 透明度必須寫,取值 0~1 之間;
- fadeTo() 的 speed 必須寫。
$(function() {
$(".wrap li").hover(function() {
// 滑鼠經過,其他的 li 標籤透明度設為 0.5
$(this).siblings().stop().fadeTo(400, 0.5);
}, function() {
// 滑鼠離開,其他 li 透明度改為 1
$(this).siblings().stop().fadeTo(400, 1);
});
});
3.3.4 自定義動畫 animate
語法規則
animate(params, [speed], [easing], [fn])
效果引數
- params:想要更改的樣式屬性,以物件形式出傳遞;必須寫。屬性名可以不用帶引號,如果是複合屬性則需要採取駝峰命名法;其餘引數都可以省略。
$(function() {
$("button").click(function() {
$("div").animate({
left: 500, // 注意 div 元素要有定位
top: 300,
opacity: .4
}, 300);
})
})
手風琴效果:
<head>
<style>
// 當前選中的 li 顯示大圖,不顯示小圖
.king li.current .big {
display: block;
}
.king li.current .small {
display: none;
}
</style>
<script src="js/jquery.min.js"></script>
<script type="text/javascript">
$(function() {
// 滑鼠經過某個 li 有兩步操作:
$(".king li").mouseenter(function() {
// 1. 當前li 寬度變為 224px,同時裡面的小圖片淡出,大圖片淡入
$(this).stop().animate({
width: 224
}).find(".small").stop().fadeOut().siblings(".big").stop().fadeIn();
// 2. 其餘同級 li 寬度變為 69px,小圖片淡入,大圖片淡出
$(this).siblings("li").stop().animate({
width: 69
}).find(".small").stop().fadeIn().siblings(".big").stop().fadeOut();
})
});
</script>
</head>
<body>
<div class="king">
<ul>
<li class="current">
<a href="javaScript:;">
<img src="images/m1.jpg" alt="" class="small">
<img src="images/m.png" alt="" class="big">
</a>
</li>
<li>
<a href="javaScript:;">
<img src="images/l1.jpg" alt="" class="small">
<img src="images/l.png" alt="" class="big">
</a>
</li>
</ul>
</div>
</body>
3.4 jQuery 屬性操作
3.4.1 設定或獲取元素固有屬性值 prop()
固有屬性:元素本身自帶的屬性,如 <a> 元素的 href,<input> 元素的 type。
-
獲取屬性
prop("屬性名")
-
設定屬性
prop("屬性名", "屬性值")
<body>
<a href="http://www.baidu.com" title="">百度</a>
<input type="checkbox" name="" id="" checked>
<div index="1" data-index="2"></div>
<script>
$(function() {
console.log($("a").prop("href"));
$("a").prop("title", "百度");
$("input").change(function() {
console.log($(this).prop("checked"))
})
})
</script>
</body>
全選功能實現:
$(function() {
$(".checkall").change(function() {
$(".checkbox, .checkall").prop("checked", $(this).prop("checked"));
})
$(".checkbox").change(function() {
// 全部選中
if ($(".checkbox:checked").length === $(".checkbox").length) {
$(".checkall").prop("checked", true);
}
else {
$(".checkall").prop("checked", false);
}
})
})
3.4.2 設定或獲取元素自定義屬性 attr()
自定義屬性:使用者自己給元素新增的屬性。
-
獲取屬性
attr("屬性名")
類似原生的 getAttribute() 方法
-
設定屬性
attr("屬性名", "屬性值")
類似原生的 setAttribute()
console.log($("div").attr("index"));
$("div").attr("idnex", "4");
console.log($("div").attr("data-index"));
3.4.3 資料快取 data()
data() 方法可以在指定的元素上存取資料,並不會修改 DOM 元素結構。一旦頁面重新整理,之前存放的資料都將被移除。
$("span").data("username", "Tom");
console.log($("span").data("username"));
// data() 方法獲取 data-index(h5自定義屬性)與 attr() 有兩個區別
// 1. 不用寫 data- 字首
// 2. 返回的是數字型
console.log($("div").data("index"));
3.5 jQuery 內容文字值
-
普通元素內容 html()
相當於原生 JS 的 innerHTML()。
// 獲取元素內容 console.log($("div").html()); // 設定元素內容 $("div").html("abc");
-
普通元素文字內容 text()
相當於原生 JS 的 innerText()。
// 獲取元素的文字內容 console.log($("div").text()); // 設定元素的文字內容 $("div").text("abc");
-
表單的值 val()
相當於原生 JS 的 value()。
// 獲取元素的文字內容 console.log($("input").val()); // 設定元素的文字內容 $("input").val("abc");
增減商品功能:
$(".increment").click(function() { var num = $(this).siblings(".goodsNum").val(); num++; $(this).siblings(".goodsNum").val(num); // 當前商品單價 var price = $(this).parents(".num").siblings(".price").html; // 去掉人民幣符號 price = price.substr(1); // 小計修改 // parents(".num") 選擇類名為 num 的上級元素 // toFixed(2) 保留兩位小數 $(this).parents(".num").siblings(".sum").html("¥" + (price * num).toFixed(2)); }) $(".decrement").click(function() { var num = $(this).siblings(".goodsNum").val(); if (num === 1) { return false; } num--; $(this).siblings(".goodsNum").val(num); // 當前商品單價 var price = $(this).parents(".num").siblings(".price").html; // 去掉人民幣符號 price = price.substr(1); // 小計修改 $(this).parents(".num").siblings(".sum").html("¥" + (price * num).toFixed(2)); }) $(".goodsNum").change(function() { // 商品數量 var num = $(this).val(); // 當前商品單價 var price = $(this).parents(".num").siblings("price").html(); price = price.substr(1); $(this).parents(".num").siblings(".sum").html("¥" + (price * num).toFixed(2)); })
3.6 jQuery 元素操作
3.6.1 遍歷元素
jQuery 隱式迭代是對同一類元素做了同樣的操作。如果想要給同一類元素做不同操作,就需要用遍歷。
語法規則1
$("div").each(function(index, domEle) {
})
- each() 方法遍歷匹配的每一個元素。主要用 DOM 處理。
- 回撥函式有兩個引數:index 是每個元素的索引號;domEle 是每個 DOM 元素物件,不是 jQuery 物件;
- 想要使用 jQuery 方法,需要給這個 DOM 元素物件轉換為 jQuery 的物件 $(domEle)。
$(function() {
var sum = 0;
var arr = ["red", "green", "blue"];
$("div").each(function(index, domEle) {
$(domEle).css("color", arr[index]);
sum += parseInt($(domEle).text());
})
})
語法規則2
$.each(object, function(index, element) {
})
- $.each() 方法可用於遍歷任何物件。主要用於資料處理,比如陣列、物件
- 回撥函式有兩個引數:index 是每個元素的索引號;element 遍歷內容
$.each($("div"), function(index, domEle) {
})
var arr = ["1", "2"];
$.each(arr, function(index, element) {
})
$.each({
name: "Tom",
age: 18
}, function(key, value) {
})
商品總額計算:
calculateSum();
function calculateSum() {
var count = 0; // 商品總件數
var money = 0; // 商品總價格
$(".goodsNum").each(function(index, domEle) {
count += parseInt($(domEle).val());
})
$(".total-sum em").text(count);
$(".sum").each(function(index, domEle) {
money += parseFloat($(domEle).text().substr(1));
})
$(".price-sum em").text("¥" + money.toFixed(2));
}
3.6.2 建立元素
語法規則
$("<li></li>");
動態的建立了一個 li 標籤。
3.6.3 新增元素
-
內部新增
element.append("內容")
把內容放入匹配元素內部最末尾,類似原生 JS 的 appendChild。
var li = $("<li></li>"); //$("ul").append(li) // 內部新增,放到 ul 的最末尾 $("ul").prepend(li) // 內部新增,放到 ul 的最前面
-
外部新增
element.after("內容")
element.before("內容")after 把內容放入目標元素後面,before 把內容放入目標元素前面。
- 內部新增元素,生成之後,它們是上下級關係
- 外部新增元素,生成之後,它們是同級關係
3.6.4 刪除元素
element.remove() 刪除匹配的元素本身
element.empty() 刪除匹配的元素集合中的所有子節點
element.html("") 清空匹配的元素內容
刪除商品模組:
// 刪除單個商品
$(".p-action a").click(function() {
$(this).parents('.cart-item').remove();
calculateSum();
})
// 刪除勾選的商品
$(".remove-batch").click(function() {
$(".checkbox:checked").parents('.cart-item').remove();
calculateSum();
})
// 清空購物車
$(".clear-all").click(function() {
$(".cart-item").remove();
calculateSum();
})
3.7 jQuery 事件
3.7.1 jQuery 事件註冊
語法規則
element.事件(function() {})
$("div").click(function() { })
其他事件和原生 JS 基本一致。
比如:mouseover、mouseout、blur、focus、change、keydown、keyup、resize、scroll 等。
$(function() {
// 1. 單個事件註冊
$("div").click(function() {
$(this).css("background", "orange");
})
$("div").mouseenter(function() {
$(this).css("background", "skyblue");
})
})
one() 方法在匹配元素上繫結一個或多個事件的事件處理函式。
$(function() {
// 2. 事件處理 on
$("div").on({
mouseenter: function() {
$(this).css("background", "red");
},
mouseleave: function() {
$(this).css("background", "green");
},
click: function() {
$(this).css("background", "blue");
}
});
// 3. 複合寫法
$("div").on("mouseenter mouseleave", function() {
$(this).toggleClass('current');
})
})
on() 方法可以實現事件委派。
事件委派:把原來加在子元素身上的事件繫結在父元素身上,就是把事件委派給父元素。
// 隱式迭代,每個 li 都綁定了事件
$("ul li").click(function() {})
// 事件只繫結在 ul,觸發在 li
$("ul").on("click", "li", function() {
})
在此之前有 bind()
、live()
、delegate()
等方法來處理事件繫結和事件委派,自新版本的用 on()
代替它們。
on() 可以給未來動態建立的元素繫結事件。
// 這種事件註冊方式不能為之後動態新增的 li 繫結事件
$("ol li").click(function() {
alert(1);
});
$("ol").on("click", "li", function() {
alert(2);
})
var li = $("<li>li</li>");
$("ol").append(li);
微博釋出功能:
<body>
<script>
// 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() { // 不能為動態建立的 a 新增事件
//})
$("ul").on("click", "a", function() {
$(this).parent().slideUp(function() {
$(this).remove();
})
})
</script>
<div class="box" id="weibo">
<span>微博釋出</span>
<textarea name="" class="txt" cols="30" rows="10"></textarea>
<button class="btn">釋出</button>
<ul>
</ul>
</div>
</body>
off()
方法可以移除通過 on()
方法新增的事件處理程式。
// 解綁 div 元素所有事件處理程式
$("div").off();
// 解綁 div 元素上的點選事件處理程式
$("div").off("click");
// 解綁事件委託
$("ul").off("click", "li");
如果有的事件只想觸發一次,可以使用 one()
來繫結事件。
$("div").one("click", function() {
});
3.7.2 自動觸發事件
$(function() {
$("div").on("click", function() {
alert(1);
})
// 自動觸發事件的三種方式
// 1. 元素.事件()
$("div").click();
// 2. 元素.trigger("事件")
$("div").trigger("click");
// 3. 元素.triggerHandler("事件")
$("div").triggerHandler("click");
$("input").on("focus", function() {
$(this).val("你好");
})
// 不會觸發元素的預設行為:自動顯示“你好”時不會有游標
$("input").triggerHandler("focus");
})
事件觸發,就會有事件物件的產生。
element.on(events, [selector], function(event) {})
阻止預設行為:event.preventDefault() 或 return false
阻止冒泡:event.stopPropagation()
3.8 jQuery 物件拷貝
如果想要把某個物件拷貝(合併)給另一個物件使用,可以使用 $.extend()
方法。
語法規則
$.extend([deep], target, object1, [objectN])
- deep:如果為 true 表示深拷貝,預設為 false 淺拷貝
- target:要拷貝的目標物件
- object1:待拷貝到第一個物件的物件
$(function() {
var targetObj = {
id: 0,
msg: {
gender: '男'
}
};
var sourceObj = {
id: 1,
name: "Tom",
msg: {
age: 18
}
};
// 淺拷貝
$.extend(targetObj, sourceObj);
console.log(targetObj); // 會覆蓋 targetObj 原來的資料
targetObj.msg.age = 20;
console.log(targetObj.msg.age); // 20
console.log(sourceObj.msg.age); // 20
// 深拷貝
$.extend(true, targetObj, sourceObj);
})
- 淺拷貝把原來物件裡面的複雜資料型別地址拷貝給目標物件
- 深拷貝把原來物件裡面的資料完全複製一份給目標物件,如果裡面有不衝突的屬性,會合併到一起。
3.9 jQuery 多庫共存
jQuery 使用 $
作為識別符號,隨著 jQuery 的流行,其他 JS 庫也會用 $
作為識別符號,這樣一起使用會引起衝突。
<script src="jquery.min.js"></script>
<script>
$(function() {
// 自定義的 $ 方法
function $(element) {
return document.querySelector(element);
}
console.log($("div"));
$.each(); // 報錯。因為自定義的 $ 方法中沒有 each() 方法
})
</script>
此時需要一個解決方案,讓 jQuery 和其他 JS 庫不存在衝突,同時存在,這就是多庫共存。
jQuery 的解決方案:
- 使用 jQuery 而不用 $
- 讓 jQuery 釋放對 $ 控制權,由使用者自定義
// 1. 使用 jQuery
jQuery.each();
// 2. 讓 jQuery 釋放對 $ 控制權,由使用者自定義
var my$ = jQuery.noConflict();
console.log(my$("span"));
my$.each();
3.10 jQuery 外掛庫
bootstrap JS 外掛
bootstrap 框架也是依賴於 jQuery 開發的,因此裡面的 JS 外掛使用,也必須引入 jQuery 檔案。
<script src="bootstrap/js/jquery.min.js"></script>
<script src="bootstrap/js/bootstrap.min.js"></script>
3.11 jQuery 尺寸、位置操作
3.11.1 jQuery 尺寸
語法 | 用法 |
---|---|
width()/height() | 取得匹配元素寬度和高度值,只算 width/height |
innerWidth()/innerHeight() | 取得匹配元素寬度和高度值,包含 padding |
outerWidth()/outerHeight() | 取得匹配元素寬度和高度值,包含 padding、border |
outerWidth(true)/outerHeight(true) | 取得匹配元素寬度和高度值,包含 padding、border、margin |
- 引數為空,則是獲取相應的值,返回結果是數字型
- 如果傳入引數為數字,則是修改相應值
- 引數可以不寫單位
3.11.2 jQuery 位置
位置主要有三個:offset()、position()、scrollTop()、scrollLeft()。
- offset() 設定或獲取元素偏移
- offset() 方法設定或返回被選元素相對於文件的偏移座標,跟父級沒有關係。
- 返回值為物件,裡面有 top、left 屬性。offset().top 用於獲取距離文件頂部的距離,offset().left 用於獲取距離文件左側的距離。
- 設定元素的偏移:offset( { top: 100, left: 100} );
- position() 獲取元素偏移
- position() 獲取距離帶有定位的父級的偏移
- 這個方法只能獲取不能設定
- scrollTop()/scrollLeft() 設定或獲取元素被捲去的頭部和左側
- scrollTop() 方法設定或返回被選元素被捲去的頭部
$(function() {
// 設定滾動被捲去的頭部
$(document).scrollTop(100);
var boxTop = $(".container").offset().top;
// 滾動事件
$(window).scroll(function() {
if ($(document).scrollTop() >= boxTop) {
$(".back").fadeIn();
} else {
$(".back").fadeOut();
}
})
// 返回頂部
$(".back").click(function() {
// 無動畫
//$(document).scrollTop(0);
// 不會發生滾動。動畫要作用在元素上,不能是文件
//$(document).stop().animate({
// scrollTop: 0
//});
$("body, html").stop().animate({
scrollTop: 0
});
})
})