jQuery
jQuery 概述
jQuery 是原生 Javascript 開發出來的代碼庫,通常被稱為架構。
jQuery 設計的宗旨是 “write Less,Do More”,即倡導寫更少的代碼,做更多的事情。
jQuery 通常被用來優化HTML文檔操作、事件處理、動畫設計和Ajax互動。
中文名: 極快瑞
外文名: jQuery
核心理念: write less,do more
釋出時間: 2006年1月
釋出人: John Resig
釋出地點: 美國紐約
最新版本: jQuery 3.1.1
第一個版本: jQuery 1.0(2006年1月)
注意:jQuery2.0 以上的版本是不支援IE6、IE7、IE8的。
jQuery 優勢
- 體積小,使用靈巧(隻需引入一個js檔案)
- 友善的選擇頁面元素(模仿CSS選擇器更精确、靈活)
- 動态更改頁面樣式/頁面内容(操作DOM,動态添加、移除樣式)
- 控制響應事件(動态添加響應事件)
- 提供基本網頁特效(提供已封裝的網頁特效方法)
- 快速實作通信(ajax)
- 易擴充、插件豐富
jQuery 下載下傳
官網:http://jquery.com/
如何引入 jQuery 包
第一種方法:本地檔案引入
第二種方法:他站網絡引入
使用 jQuery
引入 jQuery 檔案後,才能使用 jQuery 代碼。
<script src="jquery.js"></script>
<script>
$(function(){
alert("歡迎使用 jQuery");
});
</script>
- $ 是 jQuery 的别名,實際就是指 jQuery 對象。
- 上面代碼表示頁面中所有節點都準備好之後,就可以執行函數了。
$(function(){}) 與 window.οnlοad=function(){} 的差別
// jq 寫法
$(function () {
console.log("ready1");
});
$(function() {
console.log("ready2");
});
// js 寫法
window.onload = function () {
console.log('load1');
};
window.onload = function () {
console.log('load2');
}
上面的代碼運作後的結果為,ready1 ready2 load2,根據結果,得出結論:
- ready 不會覆寫,而 load 會覆寫。
- ready 在 load 之前執行。
$(function(){}) 的完整寫法
$(document).ready(function () {
alert('第一個jQuery程式!');
});
jQuery 選擇器
選擇器的作用是選出元素節點,要注意的是結果為集合,就算隻選出來一個元素節點,其結果也是集合。
- 基本選擇器
- 層級選擇器
- 僞類選擇器
基本選擇器
- ID選擇器: $("#id")
- 标簽選擇器:$(“element”)
- 類選擇器:$(".className")
- 通配選擇器:$("*") 比對指定上下文中所有元素
- 組選擇器:$(“selector1,selector2,selectorN”) 特點:無數量限制,以逗号分隔 (逐個比對,結果全部傳回)
<div>
<h4>論語</h4>
<div class="div1">子在川上曰:</div>
<p id="p1">“逝者如斯夫!</p>
<p>不舍晝夜。”</p>
</div>
<script>
console.log( $("#p1") );
</script>
層級選擇器
- 包含選擇器:$(“a b”)在給定的祖先元素下比對所有後代元素。(不受層級限制)
- 子選擇器:$(“parent > child”) 在給定的父元素下比對所有子元素。
- 相鄰選擇器:$(“prev + next”) 比對所有緊接在prev元素後的next元素。(緊随其後找1個元素)
- 兄弟選擇器:$(“prev ~ siblings”) 比對prev元素之後的所有sibling元素。
<div class="main">
<span>1<img src="img/1.jpg"/></span>
2<img src="img/1.jpg"/>
</div>
3<img src="img/1.jpg">
4<img src="img/1.jpg">
<div>
5<img src="img/1.jpg">
</div>
<script>
//$(".main img").css("border","5px solid red");
//$(".main > img").css("border","5px solid blue");
//$(".main + img").css("border","5px solid blue");
//$(".main ~ img").css("border","5px solid blue");
/*
css() 方法介紹
css() 方法前面必須是jq對象,如果是元素節點的話,會報錯
設定style屬性
如果修改一個style屬性時
$("div").css( "color", "red" );
$("div").css( {"color":"red"} );
如果修改多個style屬性時
$("div").css( {"color":"red", "background":"blue"} );
擷取style屬性
如果擷取一個style屬性時
$("div").css( "color" );
如果擷取多個style屬性時
$("div").css( ["color", "background"] );
*/
</script>
綜合應用
<h1>沁園春·雪</h1>
<h2>毛澤東</h2>
<div>
<div>
<div>
北國風光,千裡冰封,萬裡雪飄。
<div>望長城内外,惟餘莽莽;大河上下,頓失滔滔。</div>
<p>山舞銀蛇,原馳蠟象,欲與天公試比高。</p>
<p>須晴日,看紅裝素裹,分外妖娆。</p>
</div>
</div>
<p id="mp">江山如此多嬌,引無數英雄競折腰。</p>
</div>
<p class="c1">惜秦皇漢武,略輸文采;唐宗宋祖,稍遜風騷。</p>
<p class="c1">一代天驕,成吉思汗,隻識彎弓射大雕。</p>
<p>俱往矣,數風流人物,還看今朝。</p>
<script>
// 讓id為mp的元素文字大小變成30px
// 讓class名為.c1的元素背景為#CCFF99
// 将所有的div和p,統一顯示縱向間距
// 将所有的div的邊框設定 2像素 實線 紅色
// 将div下的所有子div中文字變藍色blue
// 将div中包含的div背景顔色變成#FF99FF
// 将div的所有兄弟标簽p的字型顔色變成藍色
// 将緊跟着div的p标簽的邊框設為2像素 實線 #009900
</script>
僞類選擇器
特定位置選擇器
- :first 比對找到的第1個元素
- :last 比對找到的最後一個元素
- :eq 比對一個給定索引值的元素
指定範圍選擇器
4. :even 比對所有索引值為偶數的元素
5. :odd 比對所有索引值為奇數的元素
6. :gt(index) 比對所有大于給定索引值的元素
7. :lt(index) 比對所有小于給定索引值的元素
<ul>
<li>0</li>
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
<li>6</li>
</ul>
<script>
$("li:first").css("color", "orange");
</script>
排除選擇器
8. :not 去除所有與給定選擇器比對的元素
<p>1</p>
<p id="mp">2</p>
<p class="c1">3</p>
<script>
$("p:not(.c1,#mp)").css("color", "orange");
</script>
内容選擇器
- :contains 比對包含給定文本的元素
<div>abcd</div>
<div>ABcd</div>
<div>xxyy</div>
<script>
console.log( $("div:contains('bc')") );
</script>
- :empty 比對所有不包含子元素或者文本的空元素
<table>
<tr><td>Value 1</td><td></td></tr>
<tr><td>Value 2</td><td></td></tr>
</table>
<script>
console.log( $("td:empty") );
</script>
- :has 比對含有選擇器所比對的元素的元素
<div><p>Hello</p></div>
<div>Hello again!</div>
<script>
console.log( $("div:has(p)") );
</script>
- :parent 比對含有子元素或者文本的元素
<table>
<tr><td>Value 1</td><td></td></tr>
<tr><td>Value 2</td><td></td></tr>
</table>
<script>
console.log( $("td:parent") );
</script>
可見性選擇器
- :hidden 比對所有不可見元素,或者type為hidden的元素
<table>
<tr style="display:none"><td>Value 1</td></tr>
<tr><td>Value 2</td></tr>
</table>
<script>
console.log( $("tr:hidden") );
</script>
- :visible 比對所有的可見元素
<table>
<tr style="display:none"><td>Value 1</td></tr>
<tr><td>Value 2</td></tr>
</table>
<script>
console.log( $("tr:visible") );
</script>
屬性
- [attribute] 比對包含給定屬性的元素
<div>
<p>Hello!</p>
</div>
<div id="test2"></div>
<script>
console.log( $("div[id]") );
</script>
- [attribute=value] 比對給定的屬性是某個特定值的元素
<input type="checkbox" name="a" value="1" />
<input type="checkbox" name="a" value="2" />
<input type="checkbox" name="b" value="3" />
<script>
$("input[name='a']").attr("checked", true);
</script>
- [attribute!=value] 比對所有不含有指定的屬性,或者屬性不等于特定值的元素。
<input type="checkbox" name="a" value="1" />
<input type="checkbox" name="a" value="2" />
<input type="checkbox" name="b" value="3" />
<script>
$("input[name!='a']").attr("checked", true);
</script>
- [attribute^=value] 比對給定的屬性是以某些值開始的元素
<input type="checkbox" name="abc" value="1" />
<input type="checkbox" name="adc" value="2" />
<input type="checkbox" name="b" value="3" />
<script>
$("input[name^='a']").attr("checked", true);
</script>
- [attribute$=value] 比對給定的屬性是以某些值結尾的元素
<input type="checkbox" name="abc" value="1" />
<input type="checkbox" name="adc" value="2" />
<input type="checkbox" name="b" value="3" />
<script>
$("input[name$='c']").attr("checked", true);
</script>
- [attribute*=value] 比對給定的屬性是以包含某些值的元素
<input type="checkbox" name="abc" value="1" />
<input type="checkbox" name="adc" value="2" />
<input type="checkbox" name="b" value="3" />
<script>
$("input[name*='d']").attr("checked", true);
</script>
jQuery 選擇器的優化
使用合适的選擇器表達式可以提高性能、增強語義并簡化邏輯。常用的選擇器中,ID選擇器速度最快,其次是類型選擇器。
- 多用ID選擇器
- 少直接使用class選擇器
- 多用父子關系,少用嵌套關系
- 緩存jQuery對象
過濾器
jQuery提供了2種選擇文檔元素的方式:選擇器和過濾器。
1. 類過慮器:根據元素的類屬性來進行過濾操作。
hasClass(className):判斷目前jQuery對象中的某個元素是否包含指定類名,包含傳回true,不包含傳回false
2. 下标過濾器:精确選出指定下标元素。
eq(index):擷取第N個元素。index是整數值,下标從0開始
3. 表達式過濾器。
filter():篩選出與指定表達式比對的元素集合。
expr:選擇器表達式
4. 映射 map(callback):将一組元素轉換成其他數組。
<div>1</div>
<div>2</div>
<script>
console.log($("div").map(function(){
return this.innerHTML;
}));
</script>
5. 清洗 not(expr):删除與指定表達式比對的元素。
<p>0</p>
<p>1</p>
<p>2</p>
<p>3</p>
<p>4</p>
<p>5</p>
<script>
$("p").not(":eq(2)").css("color", "red");
</script>
6. 截取 slice(start,end):選取一個比對的子集。
//$("p").slice(0,1).css("color","red");
//$("p").slice(2,4).css("color","red");
//$("p").slice(-2).css("color","red");
//$("p").slice(0,-2).css("color","red");
//$("p").slice(-4,-2).css("color","red");
7. children():取得所有元素的所有子元素集合(子元素)。
<div>
<li>0</li>
<li id="li1">1</li>
<li>2</li>
<li>3</li>
</div>
<script>
$("div").children().css("color","red");
$("div").children(":not(#li1)").css("color","red");
</script>
8. find():搜尋所有與指定表達式比對的元素(所有後代元素中查找)。
9. 查找兄弟元素 siblings()查找目前元素的兄弟。
// 查找id=li1元素的兄弟節點(包含前後兄弟節點)
$("#li1").siblings().css("color","red")
//
$("#li1").siblings(".li3,#li0").css("color","red")
//
console.log( $("p:eq(0)").siblings("div:eq(1)").children() );
操作DOM
- 什麼是DOM:document object model 文檔對象模型
- 樹形結構
- 什麼是節點(node):DOM結構中最小機關,元素、文本、屬性。。。
建立節點
var $div = $("<div title='div盒子'>我是DOM</div>")
$("body").append($div);
1.插入
a.内部插入:(子集)
append():向元素内部增加内容(末尾)
var str = $("<a href='#'>123</a>");
$("div").append(str);
appendTo():将要增加的内容增加到元素中
var str = $("<a href='#'>123</a>");
str.appendTo($("div"));
$(“A”).append(“B”) 等效 $(“B”).appendTo(“A”)
prepend():向元素内部增加内容(前置)
prependTo():将要增加的内容增加到元素中
$(“A”).prepend(“B”) 等效 $(“B”).prependTo(“A”)
b.外部插入:(同級)
after():在元素後面插入内容
insertAfter:将内容插入元素後面
A . a f t e r ( A.after( A.after(B) 等效 B . i n s e r t A f t e r ( B.insertAfter( B.insertAfter(A);
before():在元素前面插入内容
insertBefore():将内容插入元素前面
A . b e f o r e ( A.before( A.before(B) 等效 B . i n s e r t B e f o r e ( B.insertBefore( B.insertBefore(A);
2.删除
a.删除
remove():删除比對元素
$("div").remove();
$("div").remove(":eq(0)");
b.清空
empty():清空子節點内容
3.克隆:建立指定節點的副本
clone()
<b>b</b>
<p>p</p>
<script>
$("b").clone().prependTo("p"); //将b拷貝出來放到p内部前面
//或
$("b").click(function(){
// 在clone方法參數中輸入 false | true
$(this).clone().insertAfter(this);
});
</script>
預設為假,假表示不複制;真true:表示複制事件
4.替換:
replaceWith():将指定元素替換成比對元素
<b>0</b>
<b>1</b>
<b>2</b>
<script>
// i标簽不存在,則直接把b下标1的元素替換掉
$("b:eq(1)").replaceWith("<i>x</i>");
// 下标0存在,和下标2替換,相當于2删掉,0移到2的位置
$("b:eq(2)").replaceWith($("b:eq(0)"))
</script>
replaceAll():用比對元素替換成指定元素
//"<i>x</i>".replaceAll("b"); 這種寫法會報錯,因為jq方法必須在jq對象下使用。
$("<i>x</i>").replaceAll("b");
a.replaceWith(b) 等效于 b.replaceAll(a)
動畫
JavaScript 語言本身不支援動畫設計,必須通過改變 CSS 來實作動畫效果。
1. 顯隐動畫
原理:
hide() 隐藏。通過改變元素的高度寬度和不透明度,直到這三個屬性值到0
show() 顯示。從上到下增加元素的高度,從左到右增加元素寬度,從0到1增加透明度,直至内容完全可見
參數:
show()
show(speed, callback)
speed: 字元串或數字,表示動畫将運作多久(slow=0.6秒/normal=0.4/fast=0.2) //機關是毫秒
callback: 動畫完成時執行的方法
顯示和隐藏是一對密不可分的動畫形式。
2. 顯隐切換
toggle():切換元素的可見狀态
原理:比對元素的寬度、高度以及不透明度,同時進行動畫,隐藏動畫後将display設定為none
參數:
toggle(speed)
toggle(speed, callback)
toggle(boolean)
speed: 字元串或數字,表示動畫将運作多久(slow=0.6/normal=0.4/fast=0.2)
callback: 動畫完成時執行的方法
boolean: true為顯示 false為隐藏
<style>
*{padding:0;margin:0;}
div{ width:300px; height:300px; background:skyblue;}
</style>
<input type="button" value="show" />
<input type="button" value="hide" />
<input type="button" value="toggle" />
<div></div>
<script src="../jquery-1.11.3.js"></script>
<script>
$(function(){
$("input:eq(0)").click(function(){
$("div").show(3000, function(){alert()});
});
$("input:eq(1)").click(function(){
$("div").hide(3000);
});
$("input:eq(2)").click(function(){
$("div").toggle(3000);
});
});
</script>
滑動
1. 顯隐滑動效果
slideDown():滑動顯示
slideUp():滑動隐藏
參數:
slideDown(speed, callback)
slideUp(speed, callback)
2. 顯隐切換滑動
slideToggle():顯隐滑動切換
參數:
slidecToggle(speed, callback)
<style>
*{padding:0;margin:0;}
div{ width:300px; height:300px; background:skyblue;}
</style>
<input type="button" value="slideDown" />
<input type="button" value="slideUp" />
<input type="button" value="slideToggle" />
<div></div>
<script>
$(function(){
$("input:eq(0)").click(function(){
$("div").slideDown(1500, function(){alert()});
});
$("input:eq(1)").click(function(){
$("div").slideUp(1500);
});
$("input:eq(2)").click(function(){
$("div").slideToggle(1500);
});
});
</script>
漸變:通過改變不透明度
1. 淡入淡出
fadeIn()
fadeOut()
參數:
fadeIn(speed, callback)
fadeOut(speed, callback)
2. 設定淡出透明效果
fadeTo():以漸進的方式調整到指定透明度
參數:
fadeTo(speed, opacity, callback)
3.漸變切換:結合fadeIn和fadeOut
fadeToggle()
參數:
fadeOut(speed, callback)
<style>
*{padding:0;margin:0;}
div{ width:300px; height:300px; background:skyblue;}
</style>
<input type="button" value="fadeIn" />
<input type="button" value="fadeOut" />
<input type="button" value="fadeToggle" />
<input type="button" value="fadeTo" />
<div></div>
<script>
$(function(){
$("input:eq(0)").click(function(){
$("div").fadeIn(1500, function(){alert()});
});
$("input:eq(1)").click(function(){
$("div").fadeOut(1500);
});
$("input:eq(2)").click(function(){
$("div").fadeToggle(1500);
});
$("input:eq(3)").click(function(){
$("div").fadeTo(1500, 0.5);
});
});
</script>
自定義:
1. 自定義動畫:animate()
$("input:eq(0)").click(function(){
$("div").animate({
width:400,
height:200,
borderLeftWidth:10,
borderBottomLeftRadius:250
}, 1500, function(){alert('該動畫效果1500毫秒執行完畢')});
});
執行個體:樹形動畫
執行個體:頁籤
執行個體:圖檔放大效果
執行個體:樓梯
執行個體:手風琴
執行個體:下拉菜單
Event
Event 屬性:
type:擷取事件類型名稱
target:發生事件的節點
keyCode:隻針對于keypress事件,擷取鍵盤鍵數字 按下回車,13
pageX:光标對于頁面原點的水準坐标 body
pageY:光标對于頁面原點的垂直坐标
clientX:光标對于浏覽器視窗的水準坐标 浏覽器
clientY:光标對于浏覽器視窗的垂直坐标
screenX:光标對于電腦螢幕的水準坐标 電腦螢幕
screenY:光标對于電腦螢幕的垂直坐标
$(document).mousemove(function(event){
console.log( event.type );
console.log( event.target );
console.log( event.keyCode );
console.log( event.pageX , ",", event.pageY );
console.log( event.clientX , ",", event.clientY );
console.log( event.screenX , ",", event.screenY );
});
stopPropagation():阻止冒泡
- 從裡到外
- 嵌套關系
- 相同僚件
- 其中的某一父類沒有相同僚件時,繼續向上查找
<div id="div1">div1
<div id="div2">div2</div>
</div>
<script>
$("div").click(function(event){
alert(this.id);
// event.stopPropagation();
});
</script>
為比對元素綁定處理方法
bind() 綁定
<input type="button" value="按鈕" />
<script>
$("input").bind("click", function(){
alert("按鈕已被點選");
});
</script>
one() 隻執行一次
<input type="button" value="按鈕" />
<script>
$("input").one("click", function(){
alert("按鈕已被點選");
});
</script>
其他事件
blur()
focus()
mousedown()
resize()
change()
keydown()
mousemove()
scroll()
click()
keypress()
mouseout()
select()
dblclick()
keyup()
mouseover()
submit()
error()
load()
mouseup()
unload()
事件委托
delegate() 綁定
<div>
<ul>
<li>a</li>
<li>b</li>
<li>c</li>
</ul>
</div>
<script>
$("div").delegate("li", "click", function(){
console.log(this);
});
</script>
on() 綁定
<div>
<ul>
<li>a</li>
<li>b</li>
<li>c</li>
</ul>
</div>
<script>
$("div").on("click", "li", function(){
console.log(this);
});
</script>
觀察者模式
<input type="button" value="" />
<script>
// 在input元素上注冊了一個a事件
$("input").on("a", function(){alert("事件")});
// 執行input上的a事件
$("input").trigger("a");
// 移除input上的a事件
$("input").off("a");
</script>
AJAX
Ajax 全稱為:“Asynchronous JavaScript and XML”(異步 JavaScript 和 XML)
load(url, [data], [callback])
載入遠端 HTML 檔案代碼并插入至 DOM 中。
- url: 待裝入 HTML 網頁網址。
- data: 發送至伺服器的 key/value 資料。
- callback: 載入成功時回調函數。
<div></div>
<script>
$("div").load("top.html");
</script>
$("div").load("top.php", {a: 1}, function(response){
console.log(response);
});
注意:
- 以覆寫的形式載入内容
- 如果傳參,檔案必須是後端檔案
- 如果在第二個參數中,以對象的形式傳遞參數,表示 post 發送
- 如果不以對象的形式傳遞參數,表示 get 發送
- 不支援跨域通路
jQuery.get(url, [data], [callback], [type])
通過遠端 HTTP GET 請求載入資訊。
- url: 待載入頁面的URL位址
- data: 待發送 Key/value 參數。
- callback: 載入成功時回調函數。
- type: 傳回内容格式,xml, html, script, json, text, _default。
$.get("test.php");
$.get("test.php", { a: "1" } );
$.get("test.php", function(data){
alert(data);
});
// 下面代碼參數 a 也是由 get 傳遞的
$.get("test.php?b=1&c=2", { a: "1" }, function(data){
alert(data);
});
jQuery.post(url, [data], [callback], [type])
通過遠端 HTTP POST 請求載入資訊。
- url: 發送請求位址。
- data: 待發送 Key/value 參數。
- callback: 發送成功時回調函數。
- type: 傳回内容格式,xml, html, script, json, text, _default。
$.post("test.php");
$.post("test.php", { a: "1" } );
$.post("test.php", function(data){
alert(data);
});
// 下面代碼參數 i 是 get 傳遞,參數 a 是 post 傳遞
$.post("test.php?i=0", { a: "1" }, function(data){
alert(data);
});
jQuery.getScript(url, [callback])
通過 HTTP GET 請求載入并執行一個 JavaScript 檔案。
該方法可以跨域
- url: 待載入 JS 檔案位址。
- callback: 成功載入後回調函數。
<style>
.block{
width: 200px;
height: 200px;
background: gray;
}
</style>
<button id="go">» Run</button>
<div class="block"></div>
<script>
var url = "http://cdn.bootcss.com/jquery-color/2.1.2/jquery.color.min.js";
jQuery.getScript(url, function(){
$("#go").click(function(){
$(".block").animate( {
backgroundColor: 'pink'
}, 1000).animate( {
backgroundColor: 'blue'
}, 1000);
});
});
</script>
jQuery.getJSON(url, [data], [callback])
通過 HTTP GET 請求載入 JSON 資料。
- url: 發送請求位址。
- data: 待發送 Key/value 參數。
- callback: 載入成功時回調函數。
/*
後端 test.php 檔案的輸出内容必須是 json
例如:echo '{"a":"1"}'
*/
$.getJSON("test.php", { a: "1" }, function(json){
console.log(json.a);
});
jQuery.ajax(url,[settings])
通過 HTTP 請求加載遠端資料。
比較常用的屬性:
- url: 發送請求位址。
- type: 發送請求方式 GET|POST。
- data: 待發送 Key/value 參數。
- success: 載入成功時回調函數。
- dataType: 傳回資料類型。
get
$.ajax({
url:"1.php?b=123&c=456&d=abc",
data:{"a":"xxx"},
type:'GET',
success:function(response, status, xhr){
alert(response);
console.log(xhr)
},
error:function(xhr, status){
console.log(status)
}
});
post
$.ajax({
url:"1.php?b=123&c=456&d=abc",
data:{"a":"xxx"},
type:'POST',
success:function(response, status, xhr){
alert(response);
console.log(xhr)
},
error:function(xhr, status){
console.log(status)
}
});
jsonp
/*
因為 jsonp 的原理是在頁面上建立一個 script 标簽,指定 src 屬性,
是以該檔案的内容是直接寫在 script 标簽中的,是以輸出的内容必須符合 js 規範,
如果通路的是 1.php ,該頁面的輸出内容是 xxxx
那麼 jsonp 執行後,建立的 script 标簽中是這樣顯示的
<script>
xxxx
</script>
上面代碼中 xxxx 是 1.php 的輸出内容,如果直接在 script 标簽中是會報錯的。
是以得在 1.php 中将資料包裝一下,比如輸出時改為
<%
echo "callback('xxxx')";
%>
這樣在前端,jsonp 執行後,建立的 script 标簽中是這樣顯示的
<script>
callback('xxxx')
</script>
是以還得在前端檔案中自定義 callback 函數,而且該函數又是在全局執行的,是以必須定義全局函數。
*/
//是全局函數,如果是局部函數則報錯
function callback(o){
console.log(o);
}
$.ajax({
url:"1.php?b=123&c=456&d=abc",
data:{"a":"xxx"},
dataType:"jsonp",
jsonp:"callback", // 請求中的參數名
jsonpCallback:"callback" // 請求中的參數值
});
/*
jsonp 和 jsonpCallback 的内容是可以更改的,比如:
jsonp:"abc", jsonpCallback:"fn123"
語義就變成了,發起的請求中,參數為 ?abc=fn123
是以,後端需要改寫為 $_GET["abc"] 去接收 fn123,fn123是回調函數名稱
*/
/*
對 jsonp 來說,無所謂 success error,是以不用寫,寫了也不會有好執行。
*/
通路的頁面,輸出的内容,要用callback()包裹起來,因為輸出的内容是放在script标簽中的,是以表示執行callback函數。
ajaxSetup 設定全局 AJAX 預設選項
指多次執行 ajax 時,相同的屬性可以設定在 ajaxSetup 中。
$.ajaxSetup({
url:"1.php",
type:"GET"
});
// 第1個ajax中,具有ajaxSetup所設定的所有屬性
$.ajax({
data:{"a":1},
success:function(str){
alert(str);
}
});
// 第2個ajax中,也具有ajaxSetup所設定的所有屬性
$.ajax({
data:{"a":2},
success:function(str){
alert(str);
}
});
// 目前頁面中,每一個 ajax ,都具有ajaxSetup所設定的所有屬性
serialize() 序列化表單内容為字元串。
将表單内的各項的所選值取出,序列化成字元串。(url參數中的字元串)
<input id="btn" type="button" value="顯示" />
<form>
<select name="a">
<option>1</option>
<option>2</option>
</select><br>
<select name="b" multiple="multiple">
<option selected="selected">1</option>
<option>2</option>
<option selected="selected">3</option>
</select><br/>
<input type="checkbox" name="c" value="1"/> 1
<input type="checkbox" name="c" value="2" checked="checked"/> 2<br>
<input type="radio" name="d" value="1" checked="checked"/> 1
<input type="radio" name="d" value="2"/> 2
</form>
<script>
$("#btn").click(function(){
console.log( $("form").serialize() );
});
</script>
對表單來說,其内部各項必須設定 name 屬性,如果設定 id 屬性是找不到值的。
serializeArray() 序列化表單内容為數組對象。
<input id="btn" type="button" value="顯示" />
<form>
<select name="a">
<option>1</option>
<option>2</option>
</select><br>
<select name="b" multiple="multiple">
<option selected="selected">1</option>
<option>2</option>
<option selected="selected">3</option>
</select><br/>
<input type="checkbox" name="c" value="1"/> 1
<input type="checkbox" name="c" value="2" checked="checked"/> 2<br>
<input type="radio" name="d" value="1" checked="checked"/> 1
<input type="radio" name="d" value="2"/> 2
</form>
<script>
$("#btn").click(function(){
// 擷取 select 标簽,擷取 type="radio" 标簽
var arr = $("select, :radio").serializeArray();
console.log(arr);
console.log("--------");
// 用 jq 的 each 方法,對 arr 循環,arr 中每一個元素,都執行一次函數
$.each( arr, function(index, obj){
console.log(index);
console.log(obj); // {name:, value:}
console.log("--------");
});
});
</script>
jQuery.param( obj )
将表單元素數組或者對象序列化。
var params = { width:1680, height:1050 };
var str = jQuery.param(params); // width=1680&height=1050
var myObject = {
a: {
one: 1,
two: 2,
three: 3
},
b: [1,2,3]
};
var recursiveEncoded = $.param(myObject);
var recursiveDecoded = decodeURIComponent($.param(myObject)); // 解碼
alert(recursiveEncoded);
alert(recursiveDecoded);
//a%5Bone%5D=1&a%5Btwo%5D=2&a%5Bthree%5D=3&b%5B%5D=1&b%5B%5D=2&b%5B%5D=3
//a[one]=1&a[two]=2&a[three]=3&b[]=1&b[]=2&b[]=3
/*
前端:
通過 Ajax 請求 test.php?a[one]=1&a[two]=2&a[three]=3&b[]=1&b[]=2&b[]=3
後端:
echo "php:".$_GET["a"]["one"];
echo "php:".$_GET["b"][1];
*/
deferred 延期
deferred 對象就是 jQuery 的回調函數解決方案
$.get( url ).done(function(str){
// 成功時...
}).fail(function(err){
// 失敗時...
});
when 都成功時再執行函數
$.when(
$.get("test1.html"),
$.get("test2.html")
).done(function(str1, str2){
// 成功時...
}).fail(function(err){
// 失敗時...
});
jQuery 插件
自定義一些 jQuery 的方法。
$.extend({
fn1:function(){
console.log( this ); // jQuery
}
})
$.fn1();
$.fn.extend({
fn2:function(){
console.log( this ); // Object[div]
}
})
$("div").fn2();
$.fn1 = function(){
console.log( this ); // jQuery
}
$.fn1();
$.fn.fn2 = function(){
console.log( this ); // Object[div]
}
$("div").fn2();
extend可以将多個參數,合并成一個對象。
var obj = $.extend({a:1},{a:2,b:2},{b:3,c:3});
console.log( obj ); // {a:2, b:3, c:3}
var obj = $.extend(1, true, "abc", [5,6], {b:3,c:3});
console.log( obj ); // {0:5, 1:6, 2:"c", b:3, c:3}
// 設定"abc"時 {0:"a", 1:"b", 2:"c"},設定[5, 6]時,相當于{0:5, 1:6}
字元串,數組,對象都支援,後面的參數與前面的參數如果key相同,會把前面的覆寫掉。
自定義插件
msg.js
(全文完)