概念jQuery 是一個高效、精簡并且功能豐富的 JavaScript 工具庫。它提供的 API 易于使用且兼容眾多瀏覽器,這讓諸如 HTML 文檔遍歷和操作、事件處理、動畫和 Ajax 操作更加簡單。 jQuery其實就是一個封裝了很多方法的 JS 庫。 下面我們來說下 JavaScript 的缺點及使用 jQuery 的優(yōu)勢: JavaScript 缺點:
而jQuery有如下幾個優(yōu)勢:
各版本的區(qū)別目前,jQuery 有三個版本,分別為 1.x版、2.x版、3.x版。 這三個版本區(qū)別如下:
入口函數(shù)jQuery的入口函數(shù)寫法有如下兩種:
jQuery 入口函數(shù)和 window.onload 入口函數(shù)的區(qū)別:
DOM對象與jQuery對象DOM 對象:
jQuery 對象:
那么 DOM 對象與 jQuery 對象之間如何相互轉(zhuǎn)換呢?
jQuery 對象轉(zhuǎn)換成 DOM 對象有如下兩種方法:
$符號的實質(zhì)$ 其實就是一個函數(shù),用 $ 的時候,要跟小括號。括號里的參數(shù)不同,功能就不同,有以下三種用法:
|
| 名稱 | 用法 | 描述 |
|---|---|---|
| ID選擇器 | $('#id') | 獲取指定ID的元素 |
| 類選擇器 | $('.class') | 獲取同一類class的元素 |
| 標(biāo)簽選擇器 | $('div') | 獲取同一類標(biāo)簽的所有元素 |
| 并集選擇器 | $('div,li,span') | 使用逗號分隔,獲取所有的div、li、span元素 |
| 交集選擇器 | $('div.classdemo') | 選擇器1與選擇器2之間沒有空格,獲取div下class為classdemo的元素 |
| 名稱 | 用法 | 描述 |
|---|---|---|
| 子代選擇器 | $('ul>li') | 獲取兒子層級的元素,不會獲取孫子層級的元素 |
| 后代選擇器 | $('ul li') | 獲取ul下的所有l(wèi)i元素,包括孫子等 |
| 名稱 | 用法 | 描述 |
|---|---|---|
| :eq(index) | $('li:eq(2)') | 獲取到li元素中,選擇索引號為2的元素 |
| :odd | $('li:odd') | 獲取到li元素中,選擇索引號為奇數(shù)的元素 |
| :even | $('li:even') | 獲取到li元素中,選擇索引號為偶數(shù)的元素 |
獲取匹配元素集合中的第一個元素的樣式屬性的值或設(shè)置每個匹配元素的一個或多個 CSS 屬性。
.css(樣式名)
<button id="getbtn">獲取</button>
<button id="setbtn">設(shè)置</button>
<div class="div1"></div>
<div class="div2" style="width:200px"></div>
<div class="div3" style="width:300px"></div>
.div1 {
width: 100px;
height: 100px;
border: 1px solid red;
background-color: blue;
}
$(function () {
$('#getbtn').click(function () {
// 1.
console.log($('.div1').css('width')); // 100px
console.log($('.div1').css('border')); // 1px solid rgb(255, 0, 0)
// 在IE瀏覽器中,要獲取邊框,必須要給一個準(zhǔn)確的邊框,否則獲取不到
console.log($('.div1').css('border-top-width')); // 1px
// 2.獲取所有div元素的樣式
// 獲取包含了多個DOM元素的jQuery對象的樣式,只能獲取到第一個DOM對象的樣式
console.log($('div').css('width')); // 100px
})
})
注意:獲取樣式操作只會返回第一個元素對應(yīng)的樣式值
.css(樣式名,樣式值)
$(function () {
$('#setbtn').click(function () {
// 1. 設(shè)置單個樣式
$('.div1').css('width', '200px')
// 2. 設(shè)置多個樣式
$('.div1').css({
width: 200,
'height': '200px',
backgroundColor: 'yellow',
'border-left-width': '10px'
})
// 3. 給所有div元素設(shè)置樣式
$('div').css({
'height': '100px',
'border': '1px solid yellow'
})
})
})
注意:設(shè)置樣式是行內(nèi)樣式。
隱式迭代:
· 設(shè)置操作的時候:會給 jQuery 內(nèi)部的所有對象都設(shè)置上相同的值;
· 獲取的時候:只會返回第一個元素對應(yīng)的值;
| 方法 | 說明 |
|---|---|
| addClass('類名') | 添加一個類 |
| removeClass('類名') | 移除一個類 |
| hasClass('類名') | 判斷是否存在這個類,返回true/false |
| toggleClass('類名') | 切換類,如果存在則移除,不存在則添加 |
獲取匹配的元素集合中的第一個元素的屬性的值或設(shè)置每一個匹配元素的一個或多個屬性。
.attr(attributeName)
.attr() 方法只獲取第一個匹配元素的屬性值。要獲取每個單獨的元素的屬性值,需要依靠 jQuery 的 .each() 或者 .map() 方法循環(huán)。
<img src="#" alt="默認(rèn)alt" title="默認(rèn)title">
$(function () {
// 獲取屬性
console.log($("img").attr("alt")); // 默認(rèn)alt
})
.attr(attributeName, value)
$(function () {
// 1. 設(shè)置單個屬性
$("img").attr("alt", "修改了")
// 2. 設(shè)置多個屬性
$("img").attr({
"alt": "修改alt",
"title": "修改title"
})
})
獲取匹配的元素集中第一個元素的屬性(property)值或設(shè)置每一個匹配元素的一個或多個屬性。
對于布爾類型的屬性,不要使用 attr() 方法,應(yīng)該用 prop() 方法,用法與 attr() 方法一樣。
<input type="button" value="選中">
<input type="button" value="未選中">
<input type="checkbox" id="checkbox">
// 如果使用attr,則只能操作一次,不能進行多次選中/未選中
$(function () {
$("input").eq(0).click(function () {
$("#checkbox").prop("checked", true)
})
$("input").eq(1).click(function () {
$("#checkbox").prop("checked", false)
})
})
顯示(show)與隱藏(hide);滑入(slideUp)、滑出(slideDown)與切換(slideToggle);淡入(fadeIn)、淡出(fadeOut)與切換(fadeToggle)
show([speed],[callback])
hide([speed],[callback])
<input type="button" value="顯示">
<input type="button" value="隱藏">
<div></div>
$(function () {
$("input").eq(0).click(function () {
$("div").show("fast")
})
$("input").eq(1).click(function () {
$("div").hide(1000, function () {
console.log("執(zhí)行完畢");
})
})
})
滑入(slideUp)、滑出(slideDown)、切換(slideToggle)、淡入(fadeIn)、淡出(fadeOut)、切換(fadeToggle)用法與顯示(show)與隱藏(hide)一致。
.animate():根據(jù)一組 CSS 屬性,執(zhí)行自定義動畫。
它有四個參數(shù),如下:
$(function () {
$("input").eq(0).click(function () {
$("div").animate({
left: 800
}, 1000, "linear", function () {
console.log("執(zhí)行完畢");
})
})
})
.stop():停止匹配元素當(dāng)前正在運行的動畫。
它有兩個參數(shù):
· 第一個參數(shù):是否清除動畫隊列;
· 第二個參數(shù):是否跳轉(zhuǎn)到當(dāng)前動畫的最終效果;
使用 $(htmlStr) 來創(chuàng)建節(jié)點。
$("<span>創(chuàng)建節(jié)點</span>")
.append():在每個匹配元素里面的末尾處插入?yún)?shù)內(nèi)容
.appendTo():將匹配的元素插入到目標(biāo)元素的最后面
.prepend():將參數(shù)內(nèi)容插入到每個匹配元素的前面(元素內(nèi)部)
.prependTo():將所有元素插入到目標(biāo)前面(元素內(nèi))
.after():在匹配元素集合中的每個元素后面插入?yún)?shù)所指定的內(nèi)容,作為其兄弟節(jié)點
.before():根據(jù)參數(shù)設(shè)定,在匹配元素的前面插入內(nèi)容
$(function () {
var $span = $("<span>這是新創(chuàng)建的節(jié)點</span>")
// append、appendTo
// 添加到子元素最后
$("div").append($span)
$span.appendTo($("div"))
// prepend、prependTo
// 添加到子元素最前面
$("div").prepend($span)
$span.prependTo($("div"))
// before、after
$("div").after($span) // 添加到元素后面,作為兄弟元素
$("div").before($span) // 添加到元素前面,作為兄弟元素
})
.empty():從DOM中移除集合中匹配元素的所有子節(jié)點
.remove():將匹配元素集合從DOM中刪除(同時移除元素上的事件及 jQuery 數(shù)據(jù))
$(function () {
// 1. 這樣雖然會清空,但是會導(dǎo)致內(nèi)存泄漏,里面綁定的事件不會清空,最好不要使用
$("div").html("")
// 2. 清空,里面的事件也會清空
$("div").empty()
// 3. 刪除div節(jié)點
$("div").remove()
})
.clone():創(chuàng)建一個匹配的元素集合的深度拷貝副本
.val():獲取匹配的元素集合中第一個元素的當(dāng)前值或設(shè)置匹配的元素集合中每個元素的值
<input type="button" value="按鈕">
$(function () {
// 不加參數(shù)獲取value值
console.log($("input").val()); // 按鈕
// 加參數(shù),改變value值
$("input").val("改變了")
})
html() 方法相當(dāng)于 innerHTML,text() 方法相當(dāng)于 innerText。
.html():獲取集合中第一個匹配元素的 HTML 內(nèi)容或設(shè)置每一個匹配元素的 HTML 內(nèi)容
<div>
<h2>標(biāo)題</h2>
<h2>內(nèi)容</h2>
</div>
$(function () {
console.log($("div").html()); // <h2>標(biāo)題</h2><h2>內(nèi)容</h2>
$("div").html("<a href='zhouwanwen.com'>11111</a>") // 會識別a標(biāo)簽
})
.text():得到匹配元素集合中每個元素的文本內(nèi)容結(jié)合,包括他們的后代,或設(shè)置匹配元素集合中每個元素的文本內(nèi)容為指定的文本內(nèi)容
text() 不加參數(shù)可以獲取文本;給參數(shù)就是設(shè)置文本,參數(shù)就是要設(shè)置的文本。
<button id="getbtn">獲取</button>
<button id="setbtn">設(shè)置</button>
<div id="div1">
div1
<span>span1</span>
</div>
<div>
div2
<span>span2</span>
</div>
$(function () {
$('#getbtn').click(function () {
console.log($('#div1').text()); // div1 span1
console.log($('div').text()); // div1 span1 div2 span2
})
})
$(function () {
$("#setbtn").click(function () {
// 會覆蓋原來的內(nèi)容,如果文本含有標(biāo)簽,不會解析
$('#div1').text('新div<a>鏈接</a>')
$('div').text('哈哈')
})
})
.width():為匹配的元素集合中獲取第一個元素的當(dāng)前計算寬度值或給每個匹配的元素設(shè)置寬度
.height():獲取匹配元素集合中的第一個元素的當(dāng)前計算高度值 或 設(shè)置每一個匹配元素的高度值
<div></div>
div {
width: 100px;
height: 100px;
background-color: red;
padding: 10px;
border: 10px solid green;
margin: 10px;
}
$(function () {
console.log($("div").css("width")); // 100px
$("div").css("width", "300px")
// 獲取的寬度不帶單位
// 就是獲取width的值
console.log($("div").width()); // 300
// 獲取的是padding + width的值
console.log($("div").innerWidth()); // 320
// 獲取的是padding + border + width的值
console.log($("div").outerWidth()); // 340
// 獲取的是padding + border + margin + width的值
console.log($("div").outerWidth(true)); // 360
$("div").width("200")
console.log($("div").width()); // 200
// 獲取頁面可視區(qū)的寬度與高度
$(window).resize(function () {
console.log($(window).width());
console.log($(window).height());
})
})
如果不加參數(shù),則是獲取。如果加參數(shù),則是設(shè)置每個匹配元素的垂直 / 水平滾動條位置。
// 獲取頁面被卷曲的高度
$(window).scrollTop()
// 獲取頁面被卷曲的寬度
$(window).scrollLeft()
offset() 方法是獲取元素距離 document 的距離。
position() 方法是獲取元素距離有定位的父元素的位置。
注冊事件有以下幾種方式:
delegate:委托,給父元素注冊委托事件,最終還是由子元素執(zhí)行。
它有三個參數(shù):
· 第一個參數(shù):事件最終由誰來執(zhí)行
· 第二個參數(shù):事件類型
· 第三個參數(shù):函數(shù)
<button>增加</button>
<div>
<span>111</span>
<p>1</p>
<p>2</p>
</div>
$(function () {
$("button").click(function () {
$("<p>111</p>").appendTo("div")
})
// delegate:只能注冊委托事件
$("div").delegate("p", "click", function () {
alert("eee")
})
})
它有四個參數(shù):
注冊簡單事件:
$("p").on("click", function () {
alert("heh1")
})
注冊委托事件:
$("div").on("click", "p", function () {
alert("heh1")
})
事件解綁有三種方式,分別是unbind、undelegate、off。
// unbind方式
$(selector).unbind() // 解綁所有事件
$(selector).unbind("click") // 解綁指定事件
// undelegate方式
$(selector).undelegate() // 解綁所有undelegate事件
$(selector).undelegate("click") // 解綁所有click事件
// off方式
$(selector).off() // 解綁所有事件
$(selector).off("click") // 解綁所有click事件
.trigger():根據(jù)綁定到匹配元素的給定的事件類型執(zhí)行所有的處理程序和行為。
$(selector).click() // 觸發(fā)click事件
$(selector).trigger("click")
jQuery 事件對象其實就是 JS 事件對象的一個封裝,處理了兼容性。
| 名稱 | 含義 |
|---|---|
| screenX、screenY | 對于屏幕最左上角的值 |
| clientX、clientY | 距離頁面左上角的位置(忽略滾動條) |
| pageX、pageY | 距離頁面最頂部左上角的位置(會計算滾動條的距離) |
| event.keyCode | 按下的鍵盤代碼 |
| event.data | 存儲綁定事件時傳遞的附加數(shù)據(jù) |
| event.stopPropagation() | 阻止事件冒泡行為 |
| event.preventDefault() | 阻止瀏覽器默認(rèn)行為 |
| return false | 既能阻止事件冒泡,又能阻止瀏覽器默認(rèn)行為 |
jQuery 使用 $ 作為標(biāo)識符,但是如果與其他框架中的 $ 沖突時,jQuery 可以釋放 $ 的控制權(quán)。
// 釋放 $ 的控制權(quán),并且把 $ 的能力給了 $$
var $$ = $.noConflict();
|
|