Web前端學習筆記—— jQuery之簡介、物件、選擇器
阿新 • • 發佈:2018-12-11
jQuery簡介
JavaScript庫的概念
JavaScript開發的過程中,處理瀏覽器的相容很複雜而且很耗時,於是一些封裝了這些操作的庫應運而生。這些庫還會把一些常用的程式碼進行封裝。
把一些常用到的方法寫到一個單獨的js檔案,使用的時候直接去引用這js檔案就可以了。(animate.js、common.js)
常見的JavaScript 庫 - jQuery、Prototype、MooTools。其中jQuery是最常用的一個
jQuery其實就是一個js檔案,裡面封裝了一大堆的方法方便我們的開發,其實就是一個加強版的common.js,因此我們學習jQuery,其實就是學習jQuery這個js檔案中封裝的一大堆方法。
jQuery的優點好處
jQuery設計的宗旨是'Write Less,Do More',即倡導寫更少的程式碼,做更多的事情。它封裝JavaScript常用的功能程式碼,提供一種簡便的操作,優化HTML文件操作、事件處理、動畫設計和Ajax互動。
jQuery的核心特性可以總結為:具有獨特的鏈式語法和短小清晰的多功能介面;具有高效靈活的css選擇器,並且可對CSS選擇器進行擴充套件;擁有便捷的外掛擴充套件機制和豐富的外掛。jQuery相容各種主流瀏覽器。
極大地簡化了 JavaScript 程式設計。
jQuery的版本
jQuery版本有很多,分為1.x 2.x 3.x 1.x版本:能夠相容IE678瀏覽器 2.x版本:不相容IE678瀏覽器 1.x和2.x版本jquery都不再更新版本了,現在只更新3.x版本。 3.x版本:不相容IE678,更加的精簡(在國內不流行,因為國內使用jQuery的主要目的就是相容IE678) 國內多數網站還在使用1.x的版本
體驗jQuery
案例:讓div顯示與設定內容
使用JavaScript開發過程中,有許多不便之處
-查詢元素的方法太少,麻煩。
-遍歷偽陣列很麻煩,通常要巢狀一大堆的for迴圈。
-有相容性問題。
-想要實現簡單的動畫效果,也很麻煩
-程式碼冗餘。
$(document).ready(function () {
$('#btn1').click(function () {
// 隱式迭代:偷偷的遍歷,在jQuery中,不需要手動寫for迴圈了,會自動進行遍歷。
$('div').show(200);
});
$('#btn2').click (function () {
$('div').text('我是內容');
});
});
優點總結:
-查詢元素的方法多種多樣,非常靈活
-擁有隱式迭代特性,因此不再需要手寫for迴圈了。
-完全沒有相容性問題。
-實現動畫非常簡單,而且功能更加的強大。
-程式碼簡單、粗暴。
jQuery中頂級物件
jQuery中的頂級物件是$或jQuery
獲取jQuery物件
入口函式
高階功能
注意:jQuery中的$和JQuery關鍵字本身為同一物件;
jQuery中頁面載入事件
使用jQuery的三個步驟:
引入jQuery檔案
入口函式
功能實現
關於jQuery的入口函式:
// 第一種寫法
$(document).ready(function() {
});
// 第二種寫法
$(function() {
});
jQuery入口函式與window.onload的對比
JavaScript的入口函式要等到頁面中所有資源(包括圖片、檔案)載入完成才開始執行。
jQuery的入口函式只會等待文件樹載入完成就開始執行,並不會等待圖片、檔案的載入。
jQuery物件和DOM物件
jQuery物件和DOM物件的區別
DOM物件
用原生JavaScript獲取的DOM物件
通過document.getElementById() 反饋的是元素(DOM物件)
通過document.getElementsByTagName()獲取到的是什麼?
偽陣列(集合),集合中的每一個物件是DOM物件
jQuery物件
jQuery物件用$()的方式獲取的物件
jQuery物件又可以叫做包裝集(包裝的DOM物件的集合)
區別
jQuery物件不能使用DOM物件的成員,DOM物件不能使用jQuery物件的成員
// DOM物件
var box = document.getElementById('box');
// 錯誤
box.text('hello');
// 正確
box.innerText = 'hello';
// jQuery物件,jQuery物件加字首$,用以區分DOM物件
var $box = $('#box');
// 錯誤
$box.innerText = 'hello';
// 正確
$box.text('hello');
jQuery物件和DOM物件的相互轉換
jQuery物件轉換成DOM物件:
jQuery物件.get(索引值);
jQuery物件[索引值]
jQuery物件是包裝集(集合),從集合中取資料可以使用索引的方式
DOM物件轉換成jQuery物件:
$(DOM物件) 只有這一種方法;
案例
- 開關燈 [01-開關燈.html]
// 僅僅演示物件之間的轉換,程式碼不推薦這麼寫
jQuery(document).ready(function () {
// 獲取元素;
var inpArr = document.getElementsByTagName('input');
// 獲取第一個按鈕,然後繫結事件;
$(inpArr[0]).click(function () {
// 設定body的背景色
$('body')[0].style.background = '#fff';
});
// 獲取第二個按鈕,然後繫結事件;
$(inpArr[1]).click(function () {
// 設定body的背景色
$('body').get(0).style.background = '#000';
});
});
選擇器
jQuery選擇器是jQuery為我們提供的一組方法,讓我們更加方便的獲取到頁面中的元素。注意:jQuery選擇器返回的是jQuery物件。
jQuery選擇器有很多,基本相容了CSS1到CSS3所有的選擇器,並且jQuery還添加了很多更加複雜的選擇器。(檢視jQuery文件)
jQuery選擇器雖然很多,但是選擇器之間可以相互替代,就是說獲取一個元素,你會有很多種方法獲取到。所以我們平時真正能用到的只是少數的最常用的選擇器。
jQuery基本選擇器
名稱 | 用法 | 描述 |
---|---|---|
ID選擇器 | $(’#id’); | 獲取指定ID的元素 |
類選擇器 | $(’.class’); | 獲取同一類class的元素 |
標籤選擇器 | $(‘div’); | 獲取同一類標籤的所有元素 |
並集選擇器 | $(‘div,p,li’); | 使用逗號分隔,只要符合條件之一就可。 |
交集選擇器 | $(‘div.redClass’); | 獲取class為redClass的div元素 |
- 總結:跟css的選擇器用法一模一樣。
jQuery層級選擇器
名稱 | 用法 | 描述 |
---|---|---|
子代選擇器 | $(‘ul > li’); | 使用-號,獲取兒子層級的元素,注意,並不會獲取孫子層級的元素 |
後代選擇器 | $(‘ul li’); | 使用空格,代表後代選擇器,獲取ul下的所有li元素,包括孫子等 |
- 跟CSS的選擇器一模一樣。
jQuery過濾選擇器
- 這類選擇器都帶冒號:
名稱 | 用法 | 描述 |
---|---|---|
:eq(index) | $(‘li:eq(2)’).css(‘color’, ‘red’); | 獲取到的li元素中,選擇索引號為2的元素,索引號index從0開始。 |
:odd | $(‘li:odd’).css(‘color’, ‘red’); | 獲取到的li元素中,選擇索引號為奇數的元素 |
:even | $(‘li:even’).css(‘color’, ‘red’); | 獲取到的li元素中,選擇索引號為偶數的元素 |
jQuery篩選選擇器(方法)
- 篩選選擇器的功能與過濾選擇器有點類似,但是用法不一樣,篩選選擇器主要是方法。
名稱 | 用法 | 描述 |
---|---|---|
children(selector) | $(‘ul’).children(‘li’) | 相當於$(‘ul-li’),子類選擇器 |
find(selector) | $(‘ul’).find(‘li’); | 相當於$(‘ul li’),後代選擇器 |
siblings(selector) | $(’#first’).siblings(‘li’); | 查詢兄弟節點,不包括自己本身。 |
parent() | $(’#first’).parent(); | 查詢父親 |
eq(index) | $(‘li’).eq(2); | 相當於$(‘li:eq(2)’),index從0開始 |
next() | $(‘li’).next() | 找下一個兄弟 |
prev() | $(‘li’).prev() | 找上一次兄弟 |
案例
- 滑鼠放上突出展示 [02-突出展示.html]
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
<style type="text/css">
* {
margin: 0;
padding: 0;
}
ul {
list-style: none;
}
body {
background: #000;
}
.wrap {
margin: 100px auto 0;
width: 630px;
height: 394px;
padding: 10px 0 0 10px;
background: #000;
overflow: hidden;
border: 1px solid #fff;
}
.wrap li {
float: left;
margin: 0 10px 10px 0;
}
.wrap img {
display: block;
border: 0;
}
</style>
<script src="jquery-1.12.2.js"></script>
<script>
$(function () {
//獲取所有的li,新增滑鼠進入事件
$(".wrap>ul>li").mouseenter(function () {
//設定當前的li的透明度的同時修改當前的li的所有的兄弟元素li的透明度
$(this).css("opacity",1).siblings("li").css("opacity",0.5);
});
//滑鼠離開事件
$(".wrap").mouseleave(function () {
//從當前的div中所有的li,設定透明度
$(this).find("li").css("opacity",1);
});
});
</script>
</head>
<body>
<div class="wrap">
<ul>
<li><a href="#"><img src="images/01.jpg" alt=""/></a></li>
<li><a href="#"><img src="images/02.jpg" alt=""/></a></li>
<li><a href="#"><img src="images/03.jpg" alt=""/></a></li>
<li><a href="#"><img src="images/04.jpg" alt=""/></a></li>
<li><a href="#"><img src="images/05.jpg" alt=""/></a></li>
<li><a href="#"><img src="images/06.jpg" alt=""/></a></li>
</ul>
</div>
</body>
</html>
- 好友列表切換
<!DOCTYPE html>
<html>
<head lang="en">
<title></title>
<meta charset="UTF-8">
<style type="text/css">
#u1 li {
margin-bottom: 10px;
background-color: Orange;
font-size: 20px;
font-weight: bolder;
cursor: pointer;
}
#u1 li ul {
list-style-type: none;
margin: 0;
padding: 0;
}
#u1 li ul li {
background-color: pink;
}
</style>
<script src="jquery-1.12.1.js"></script>
<script>
//頁面載入後,隱藏所有的li
$(function () {
$("#u1>li>ul").hide();
//找到id為u1下面的直接的子元素li新增點選事件
$("#u1>li").click(function () {
//當前點選的li裡面的ul顯示
$(this).children("ul").show(500);
//隱藏當前被點選的li的兄弟元素的li中的ul
$(this).siblings("li").find("ul").hide(500);
});
});
</script>
</head>
<body>
<div style=" width:200px; height:500px; border:1px solid red;">
<ul id="u1" style=" list-style-type:none; margin:0; padding:0; text-align:center;">
<li>
幼兒園同學
<ul>
<li>鼻涕蟲</li>
<li>愛哭鬼</li>
<li>張大膽</li>
<li>班主任</li>
</ul>
</li>
<li>小學同學
<ul>
<li>張三丰</li>
<li>張無忌</li>
<li>喬布斯</li>
<li>助教</li>
</ul>
</li>
<li>
初中同學
<ul>
<li>蓋茨</li>
<li>川普</li>
<li>奧巴馬</li>
<li>鳳姐</li>
</ul>
</li>
</ul>
</div>
</body>
</html>
- 下拉選單 [04-下拉選單.html]
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
<style type="text/css">
* {
margin: 0;
padding: 0;
}
ul {
list-style: none;
}
.wrap {
width: 330px;
height: 30px;
margin: 100px auto 0;
padding-left: 10px;
background-image: url(images/bg.jpg);
}
.wrap li{
background-image: url(images/libg.jpg);
}
.wrap > ul > li {
float: left;
margin-right: 10px;
position: relative;
}
.wrap a {
display: block;
height: 30px;
width: 100px;
text-decoration: none;
color: #000;
line-height: 30px;
text-align: center;
}
.wrap li ul {
position: absolute;
top: 30px;
display: none;
}
</style>
<script src="vendor/jquery.js"></script>
<script>
jQuery(document).ready(function () {
//需求1:滑鼠進入ul中的子元素li,讓該li的子元素ul顯示;
//需求2:滑鼠移開ul中的子元素li,讓該li的子元素ul隱藏;
//需求1:滑鼠進入ul中的子元素li,讓該li的子元素ul顯示;
$(".wrap>ul>li").mouseover(function () {
//獲取滑鼠進入的li,是原生dom物件;
//轉換成jquery物件
$(this).children("ul").show();
});
//需求2:滑鼠移開ul中的子元素li,讓該li的子元素ul隱藏;
$(".wrap>ul>li").mouseout(function () {
$(this).children("ul").hide();
});
});
</script>
</head>
<body>