一.JQ對象與DOM對象區(qū)別
document.getElementById('test');:DOM對象
$("#test"):JQ對象
JQ對象包含DOM對象,
- JQ對象想要使用原生JS里的方法,可以用取鍵方式現(xiàn)將其轉(zhuǎn)變?yōu)镈OM對象。
- DOM對象想使用JQ對象方法,直接在外面加
$()就行了。
二.遍歷jQuery對象
-
each(callback)以每一個匹配的元素作為上下文來執(zhí)行一個函數(shù)。
意味著,每次執(zhí)行傳遞進(jìn)來的函數(shù)時(shí),函數(shù)中的this關(guān)鍵字都指向一個不同的DOM元素(每次都是一個不同的匹配元素)。而且,在每次執(zhí)行函數(shù)時(shí),都會給函數(shù)傳遞一個表示作為執(zhí)行環(huán)境的元素在匹配的元素集合中所處位置的數(shù)字值作為參數(shù)(從零開始的整型)。 返回 'false' 將停止循環(huán) (就像在普通的循環(huán)中使用 'break')。返回 'true' 跳至下一個循環(huán)(就像在普通的循環(huán)中使用'continue')
HTML代碼:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<script type="text/javascript" src="static/js/jquery.min.js"></script>
<title>ajax</title>
</head>
<body>
<h1>遍歷jQuery對象內(nèi)部的DOM對象</h1>
<input type="button" value="反選" onclick="fan()">
<p>選擇1:<input type="checkbox"></p>
<p>選擇2:<input type="checkbox"></p>
<p>選擇3:<input type="checkbox"></p>
<p>選擇4:<input type="checkbox"></p>
<p>選擇5:<input type="checkbox"></p>
</body>
</html>
jQuery代碼:
- 面向過程
<script type="text/javascript">
function fan(){
var inp = $("input:checkbox");
for(var i=0;i<inp.length;i++){
if($(inp[i]).prop("checked") == true){
$(inp[i]).prop("checked",false);
}else{
$(inp[i]).prop("checked",true);
}
}
}
</script>
面向?qū)ο?用each方法):
<script type="text/javascript">
function fan(){
var inp = $("input:checkbox");
inp.each(function(){
if($(this).prop("checked") == true){
$(this).prop("checked",false);
}else{
$(this).prop("checked",true);
}
})
}
</script>
簡單方法:
<script type="text/javascript">
function fan(){
$("input:checkbox").each(function(){
this.checked = !this.checked;
})
}
</script>
效果:

三.獲取元素值
-
val([val|fn|arr])獲得匹配元素的當(dāng)前值。
在 jQuery 1.2 中,可以返回任意元素的值了。包括select。如果多選,將返回一個數(shù)組,其包含所選的值。
-
:focus匹配當(dāng)前獲取焦點(diǎn)的元素。
HTML代碼:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<script type="text/javascript" src="static/js/jquery.min.js"></script>
<title>ajax</title>
</head>
<body>
<p><input type="text" name="inp1" value="請輸入用戶名"></p>
</body>
</html>
jQuery代碼:
<script type="text/javascript">
$("input[name='inp1']").mouseover(function(){
if($(this).val() == '請輸入用戶名'){
$(this).val('');
$(this).focus();
}
})
</script>
效果:

四.ready事件
-
ready(fn)當(dāng)DOM載入就緒可以查詢及操縱時(shí)綁定一個要執(zhí)行的函數(shù)。
這是事件模塊中最重要的一個函數(shù),因?yàn)樗梢詷O大地提高web應(yīng)用程序的響應(yīng)速度
HTML代碼:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<script type="text/javascript" src="static/js/jquery.min.js"></script>
<title>ajax</title>
</head>
<body>
<img src="static/images/3.png">
</body>
</html>
jQuery代碼:
<script type="text/javascript">
onload = function(){
alert('頁面加載完畢');
}
$(document).ready(function(){
alert('dom加載完畢');
})
</script>
效果:


五.綁定事件
-
on(events,[selector],[data],fn)在選擇元素上綁定一個或多個事件的事件處理函數(shù)。on()方法綁定事件處理程序到當(dāng)前選定的jQuery對象中的元素,要刪除的.on()綁定的事件,用.off()。 -
off(events,[selector],[fn])在選擇元素上移除一個或多個事件的事件處理函數(shù)。off() 方法移除用.on()綁定的事件處理程序。
HTML代碼:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<script type="text/javascript" src="static/js/jquery.min.js"></script>
<title>ajax</title>
</head>
<body>
<input type="button" value="給div加點(diǎn)擊事件" onclick="jia();">
<input type="button" value="給div取消點(diǎn)擊事件" onclick="jie();">
<div style="width: 200px;height: 200px;background: gray;">
</body>
</html>
jQuery代碼:
<script type="text/javascript">
function dong(){
alert('冬天');
}
function jia(){
$("div").on('click',function(){
alert('你好');
});
$("div").on('click',dong);
}
function jie(){
$("div").off('click');
}
</script>
效果:

點(diǎn)擊給div取消點(diǎn)擊事件按鈕,再點(diǎn)擊灰色方塊,無反應(yīng)

六.一次向綁定
-
one(type,[data],fn)為每一個匹配元素的特定事件(像click)綁定一個一次性的事件處理函數(shù)。在每個對象上,這個事件處理函數(shù)只會被執(zhí)行一次。
HTML代碼:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<script type="text/javascript" src="static/js/jquery.min.js"></script>
<title>ajax</title>
</head>
<body>
<input type="button" value="有些話想對你說">
</body>
</html>
jQuery代碼:
<script type="text/javascript">
$("input:button").one('click',function(){
alert('今晚操場見!')
})
</script>
效果:


再次點(diǎn)擊有些話想對你所按鈕無反應(yīng)

七.事件委托
-
on(events,[selector],[data],fn)在選擇元素上綁定一個或多個事件的事件處理函數(shù)。 -
text([val|fn])取得所有匹配元素的內(nèi)容。結(jié)果是由所有匹配元素包含的文本內(nèi)容組合起來的文本。
HTML代碼:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<script type="text/javascript" src="static/js/jquery.min.js"></script>
<title>ajax</title>
</head>
<body>
<input type="button" value="添加li">
<ul>
<li>春</li>
<li>夏</li>
<li>秋</li>
</ul>
</body>
</html>
jQuery代碼:
<script type="text/javascript">
$("input:button").click(function(){
$("ul").append("<li>冬</li>")
})
$("ul").on('click','li',function(){
alert($(this).text());
});
</script>
效果:
點(diǎn)擊li春,夏,秋分別alert出春,夏,秋

li冬
li冬alert出冬
八.事件對象
-
event.which針對鍵盤和鼠標(biāo)事件,這個屬性能確定你到底按的是哪個鍵或按鈕。 -
keyup([[data],fn])當(dāng)按鈕被松開時(shí),發(fā)生 keyup 事件。它發(fā)生在當(dāng)前獲得焦點(diǎn)的元素上。 -
keydown([[data],fn])當(dāng)鍵盤或按鈕被按下時(shí),發(fā)生 keydown 事件。
HTML代碼:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<script type="text/javascript" src="static/js/jquery.min.js"></script>
<title>ajax</title>
</head>
<body>
<input type="text">
</body>
</html>
jQuery代碼:
<script type="text/javascript">
$("input:text").keyup(function(ev){
var test = ev.type + ':' + ev.which;
console.log(test);
});
</script>
效果:

九.動畫
-
fadeOut([speed],[easing],[fn])通過不透明度的變化來實(shí)現(xiàn)所有匹配元素的淡出效果,并在動畫完成后可選地觸發(fā)一個回調(diào)函數(shù)。 -
fadeIn([speed],[easing],[fn])通過不透明度的變化來實(shí)現(xiàn)所有匹配元素的淡入效果,并在動畫完成后可選地觸發(fā)一個回調(diào)函數(shù)。 -
slideUp([speed,[easing],[fn]])通過高度變化(向上減小)來動態(tài)地隱藏所有匹配的元素,在隱藏完成后可選地觸發(fā)一個回調(diào)函數(shù)。 -
slideDown([speed],[easing],[fn])通過高度變化(向下增大)來動態(tài)地顯示所有匹配的元素,在顯示完成后可選地觸發(fā)一個回調(diào)函數(shù)。 -
delay(duration,[queueName])設(shè)置一個延時(shí)來推遲執(zhí)行隊(duì)列中之后的項(xiàng)目。 -
jQuery.fx.off關(guān)閉頁面上所有的動畫。把這個屬性設(shè)置為true可以立即關(guān)閉所有動畫(所有效果會立即執(zhí)行完畢)。有些情況下可能需要這樣,比如:
1.你在配置比較低的電腦上使用jQuery。
2.你的一些用戶由于動畫效果而遇到了 可訪問性問題。
當(dāng)把這個屬性設(shè)成false之后,可以重新開啟所有動畫。
HTML代碼:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<script type="text/javascript" src="static/js/jquery.min.js"></script>
<title>ajax</title>
</head>
<style class="scr" media="screen">
div{
width: 1024px;
height: 768px;
background: gray;
}
</style>
<body>
<div class="scr">
<img src="/static/images/4.png">
</div>
</body>
</html>
jQuery代碼`:
<script type="text/javascript">
//jQuery.fx.off = true; //取消所有動畫效果
$("div").click(function(){
$(this)
.fadeOut(2000,function(){
alert('div消失了!');
})
.delay(2000)
.fadeIn(2000,function(){
alert('div出現(xiàn)了!');
})
.delay(2000)
.slideUp(2000,function(){
alert('div向上滑!');
})
.delay(2000)
.slideDown(2000,function(){
alert('div向下滑!');
});
});
</script>
效果:點(diǎn)擊出現(xiàn)動畫效果
十.jQuery使用Ajax
(一)Ajax請求
-
jQuery.ajax(url,[settings])通過 HTTP 請求加載遠(yuǎn)程數(shù)據(jù)。
jQuery 底層 AJAX 實(shí)現(xiàn)。$.ajax()返回其創(chuàng)建的 XMLHttpRequest 對象。最簡單的情況下,$.ajax()可以不帶任何參數(shù)直接使用。
回調(diào)函數(shù)
如果要處理$.ajax()得到的數(shù)據(jù),則需要使用回調(diào)函數(shù)。beforeSend、error、dataFilter、success、complete。
- beforeSend 在發(fā)送請求之前調(diào)用,并且傳入一個XMLHttpRequest作為參數(shù)。
- error 在請求出錯時(shí)調(diào)用。傳入XMLHttpRequest對象,描述錯誤類型的字符串以及一個異常對象(如果有的話)
- dataFilter 在請求成功之后調(diào)用。傳入返回的數(shù)據(jù)以及"dataType"參數(shù)的值。并且必須返回新的數(shù)據(jù)(可能是處理過的)傳遞給success回調(diào)函數(shù)。
- success 當(dāng)請求之后調(diào)用。傳入返回后的數(shù)據(jù),以及包含成功代碼的字符串。
- complete 當(dāng)請求完成之后調(diào)用這個函數(shù),無論成功或失敗。傳入XMLHttpRequest對象,以及一個包含成功或錯誤代碼的字符串。
數(shù)據(jù)類型
$.ajax()函數(shù)依賴服務(wù)器提供的信息來處理返回的數(shù)據(jù)。
如果服務(wù)器報(bào)告說返回的數(shù)據(jù)是XML,那么返回的結(jié)果就可以用普通的XML方法或者jQuery的選擇器來遍歷。如果得到其他類型,比如HTML,則數(shù)據(jù)就以文本形式來對待。
通過dataType選項(xiàng)還可以指定其他不同數(shù)據(jù)處理方式。除了單純的XML,還可以指定 html、json、jsonp、script或者text。
發(fā)送數(shù)據(jù)到服務(wù)器
默認(rèn)情況下,Ajax請求使用GET方法。如果要使用POST方法,可以設(shè)定type參數(shù)值。這個選項(xiàng)也會影響data選項(xiàng)中的內(nèi)容如何發(fā)送到服務(wù)器。
參數(shù)
url: [類型: String]一個用來包含發(fā)送請求的URL字符串。
settings: [類型: PlainObject]AJAX 請求設(shè)置。所有選項(xiàng)都是可選的。
settings:選項(xiàng)
-
url(默認(rèn): 當(dāng)前頁地址) [類型: String]
發(fā)送請求的地址。 -
type(默認(rèn): "GET") [類型: String]
請求方式 ("POST" 或 "GET"), 默認(rèn)為 "GET"。 -
data[類型: String,Array]
發(fā)送到服務(wù)器的數(shù)據(jù)。將自動轉(zhuǎn)換為請求字符串格式。必須為 Key/Value 格式。如果為數(shù)組,jQuery 將自動為不同值對應(yīng)同一個名稱。如 {foo:["bar1", "bar2"]} 轉(zhuǎn)換為 "&foo=bar1&foo=bar2"。 -
dataType[類型: String]
預(yù)期服務(wù)器返回的數(shù)據(jù)類型。如果不指定,jQuery 將自動根據(jù) HTTP 包 MIME 信息來智能判斷,比如XML MIME類型就被識別為XML。在1.4中,JSON就會生成一個JavaScript對象,而script則會執(zhí)行這個腳本。隨后服務(wù)器端返回的數(shù)據(jù)會根據(jù)這個值解析后,傳遞給回調(diào)函數(shù)??捎弥?
xml: 返回 XML 文檔,可用 jQuery 處理。
html: 返回純文本 HTML 信息;包含的script標(biāo)簽會在插入dom時(shí)執(zhí)行。
script: 返回純文本 JavaScript 代碼。不會自動緩存結(jié)果。除非設(shè)置了"cache"參數(shù)。'''注意:'''在遠(yuǎn)程請求時(shí)(不在同一個域下),所有POST請求都將轉(zhuǎn)為GET請求。(因?yàn)閷⑹褂肈OM的script標(biāo)簽來加載)
json: 返回 JSON 數(shù)據(jù) 。
jsonp: JSONP 格式。
text: 返回純文本字符串
-
statusCode(默認(rèn): {}) [類型: Map]
一組數(shù)值的HTTP代碼和函數(shù)對象,當(dāng)響應(yīng)時(shí)調(diào)用了相應(yīng)的代碼。例如,如果響應(yīng)狀態(tài)是404,將觸發(fā)以下警告:
$.ajax({
statusCode: {404: function() {
alert('page not found');
}
});
-
context[類型: Object]
這個對象用于設(shè)置Ajax相關(guān)回調(diào)函數(shù)的上下文。
也就是說,讓回調(diào)函數(shù)內(nèi)this指向這個對象(如果不設(shè)定這個參數(shù),那么this就指向調(diào)用本次AJAX請求時(shí)傳遞的options參數(shù))。
比如指定一個DOM元素作為context參數(shù),這樣就設(shè)置了success回調(diào)函數(shù)的上下文為這個DOM元素。就像這樣:
$.ajax({
url: "test.html", context: document.body, success: function(){
$(this).addClass("done");
}
});
-
success(data, textStatus, jqXHR)[類型: Function(Object data, String textStatus, jqXHR jqXHR)]
請求成功后的回調(diào)函數(shù)。
參數(shù):由服務(wù)器返回,并根據(jù)dataType參數(shù)進(jìn)行處理后的數(shù)據(jù);描述狀態(tài)的字符串。還有 jqXHR對象 。
在jQuery 1.5, 成功設(shè)置可以接受一個函數(shù)數(shù)組。每個函數(shù)將被依次調(diào)用。
function (data, textStatus) {
// data 可能是 xmlDoc, jsonObj, html, text, 等等...
this; // 調(diào)用本次AJAX請求時(shí)傳遞的options參數(shù)
}
-
error(默認(rèn): 自動判斷 xml 或 html) [類型: Function(jqXHR jqXHR, String textStatus,String errorThrown )]
請求失敗時(shí)調(diào)用此函數(shù)。有以下三個參數(shù):
XMLHttpRequest 對象、錯誤信息、(可選)捕獲的異常對象。
如果發(fā)生了錯誤,錯誤信息(第二個參數(shù))除了得到null之外,還可能是timeout,error,notmodified和parsererror。
function (XMLHttpRequest, textStatus, errorThrown) {
// 通常 textStatus 和 errorThrown 之中只有一個會包含信息
this; // 調(diào)用本次AJAX請求時(shí)傳遞的options參數(shù)
}
-
timeout[類型: Number]
設(shè)置請求超時(shí)時(shí)間(毫秒)。此設(shè)置將覆蓋全局設(shè)置。 -
async(默認(rèn): true) [類型: Boolean]
默認(rèn)設(shè)置下,所有請求均為異步請求。如果需要發(fā)送同步請求,請將此選項(xiàng)設(shè)置為 false。注意,同步請求將鎖住瀏覽器,用戶其它操作必須等待請求完成才可以執(zhí)行。 -
beforeSend(XHR)[類型: Function( jqXHR jqXHR,PlainObject settings )]
發(fā)送請求前可修改 XMLHttpRequest 對象的函數(shù),如添加自定義 HTTP 頭。XMLHttpRequest 對象是唯一的參數(shù)。 -
complete(XHR, TS)[類型: Function(jqXHR jqXHR, String textStatus)]
請求完成后回調(diào)函數(shù) (請求成功或失敗之后均調(diào)用)。參數(shù): XMLHttpRequest 對象和一個描述成功請求類型的字符串。
PHP代碼:
<?php
namespace app\index\controller;
use think\Controller;
class Index extends Controller
{
public function index()
{
return $this->fetch('1');
}
public function pos()
{
if(request()->isPost())
{
$data=input('post.');
}
echo json_encode($data);
}
}
HTML代碼:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<script type="text/javascript" src="static/js/jquery.min.js"></script>
<title>ajax</title>
</head>
<body>
<form action="" method="post">
<p>Name:<input type="text" name="username"></p>
<p>Email:<input type="text" name="email"></p>
<p><input type="submit" name="submit"></p>
</form>
</body>
</html>
jQuery代碼:
<script type="text/javascript">
$("form").submit(function(){
var data = {
'username':$("input[name='username']").val(),
'email':$("input[name='email']").val(),
};
$.ajax({
url:'{:url("index/pos")}',
type:'POST',
data:data,
dataType:'json',
success:function(res){
alert(
'username:' + res['username']+
'\nemail:' + res['email']
);
},
});
return false;
});
</script>
效果:

(二)Ajax之GET請求
-
jQuery.get(url, [data], [callback], [type])通過遠(yuǎn)程 HTTP GET 請求載入信息。
這是一個簡單的 GET 請求功能以取代復(fù)雜$.ajax。請求成功時(shí)可調(diào)用回調(diào)函數(shù)。如果需要在出錯時(shí)執(zhí)行函數(shù),請使用$.ajax。
參數(shù)
url:待載入頁面的URL地址
data:待發(fā)送 Key/value 參數(shù)。
callback:載入成功時(shí)回調(diào)函數(shù)。
type:返回內(nèi)容格式,xml, html, script, json, text, _default。
PHP代碼:
<?php
namespace app\index\controller;
use think\Controller;
class Index extends Controller
{
public function index()
{
return $this->fetch('1');
}
public function se()
{
if(request()->isGet())
{
$data=input('username');
}
$arr =[
'lisi','zhaoliu','zhaosi'
];
echo in_array($data,$arr)?1:0;
}
}
HTML代碼
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<script type="text/javascript" src="static/js/jquery.min.js"></script>
<title>ajax</title>
</head>
<body>
<div class="scr">
<p><input type="text" name="username"><span id="sp"></span></p>
</div>
</body>
</html>
jQuery代碼:
<script type="text/javascript">
$("input").blur(function(){
var url = '{:url("index/se")}?username=' + $(this).val();
$.get(url,function(res){
if(res == 1){
$("#sp").html('<font color="red">用戶名已存在!</font>');
}else{
$("#sp").html('<font color="green">用戶名可以使用!</font>');
}
});
})
</script>
效果:

輸入zhangsan顯示用戶名可以使用

(三)Ajax之POST請求
-
jQuery.post(url, [data], [callback], [type])通過遠(yuǎn)程 HTTP POST 請求載入信息。
這是一個簡單的 POST 請求功能以取代復(fù)雜$.ajax。請求成功時(shí)可調(diào)用回調(diào)函數(shù)。如果需要在出錯時(shí)執(zhí)行函數(shù),請使用$.ajax。
參數(shù)
url:發(fā)送請求地址。
data:待發(fā)送 Key/value 參數(shù)。
callback:發(fā)送成功時(shí)回調(diào)函數(shù)。
type:返回內(nèi)容格式,xml, html, script, json, text, _default。
PHP代碼:
<?php
namespace app\index\controller;
use think\Controller;
class Index extends Controller
{
public function index()
{
return $this->fetch('1');
}
public function pos()
{
if(request()->isPost())
{
$data=input('post.');
}
print_r($data);
}
}
HTML代碼:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<script type="text/javascript" src="static/js/jquery.min.js"></script>
<title>ajax</title>
</head>
<body>
<form action="" method="post">
<p>Name:<input type="text" name="username"></p>
<p>Email:<input type="text" name="email"></p>
<p><input type="submit" name="submit"></p>
</form>
</body>
</html>
jQuery代碼:
<script type="text/javascript">
$("form").submit(function(){
var data = {
'username':$("input[name='username']").val(),
'email':$("input[name='email']").val(),
};
$.post(
url = '{:url("index/pos")}',
data = data,
callback = function(res){
console.log(res);
}
);
return false;
});
</script>
效果:
