【乾貨篇】步步爲營,帶你輕鬆掌握jQuery!

寫在前面:javascript


 

通過系統的學習了原生JS以後,會發現其具備如下三個特色:css

一、是一種解釋性腳本語言(代碼不進行預編譯)。
二、主要用來向 HTML 頁面添加交互行爲。
三、能夠直接嵌入 HTML 頁面,但寫成單獨的js文件有利於結構和行爲的分離。
html

而接下來要講的jQuery 就對原生javascript的一個擴展,封裝,就是讓javascript更好用,更簡單。java

換而言之,jquery就是要用更少的代碼,漂亮的完成更多的功能。{Write less, Do more!}jquery

1. jQuery 做爲 JavaScript 的代碼庫,天然是使用 JavaScript 語言編寫的。
2. jQuery 的代碼很是規範,執行效率也很高,是 JavaScript 編碼的優秀範例。
3. 不少情只要使用 jQuery 的方法就能夠實現大部分的 JavaScript 功能。程序員

因此說,程序員做爲一種極懶的物種存在,勢必想着要減小沒必要要的代碼勞動量,所以jQuery誕生了。ajax

 


1、jQuery基礎語法 
json


一、適應JQuery、必需要先導入JQuery。x.x.x.js文件。數組

  二、JQuery中的選擇器: $("選擇器").函數();
① $是JQuery的縮寫形式,即也可使用JQuery("選擇器").函數();
② 選擇器,能夠是任何CSS支持的選擇符;
三、文檔就緒函數:防止文檔在未徹底加載以前,運行JQuery代碼;
 $(document).ready(function() { //JQuery代碼  }); 簡寫形式以下: $(function(){});

[文檔就緒函數&window.onload的區別]瀏覽器

① window.onload必須等到網頁中的全部內容(包括圖片視頻)加載完成後才能執行代碼;
文檔就緒函數只須要在 網頁DOM結構加載完成以後,就能夠執行代碼;
② window.onload只能寫一個,寫多個以後只會執行最後一個;
文檔就緒函數能夠寫多個,並且不會覆蓋。
四、原生JS對象與JQuery對象:
① 使用$("")選中的是JQuery對象,只能調用JQuery函數,而不能使用元素的JS事件與函數;
 $("#p").click() √
 $("#p").onclick = function(){}; ×

解釋:

$("#p")是JQuery對象,.onclick是原生的JS事件。
同理,使用document.getElement系列獲取的是原生JS對象,也不能使用JQuery相關函數。
② 原生的JS對象轉爲 JQuery對象
可使用$() 包裹便可以轉爲JQuery對象
var p = document.getElementsByTagName("p");
$("p").click(); √ 原生的JS對象已經轉爲 JQuery對象;
③ JQuery轉爲原生JS對象:
使用get(index)或者[index]
 $("#p").get(0).onclick() = function () {}; √ $("#p").[0].onclick() = function () {}; √
五、 因爲其其餘的庫也可能使用$做爲自身標識,致使其餘的JS庫與JQuery衝突。
① 要解決衝突,能夠放棄使用$,直接使用JQuery對象。
 
 !function ($) { $()//函數之中,就可使用$代替JQuery對象。 }(jQuery); 

② [jQuery.noConflict();]

運行這個函數將變量$的控制權讓渡給第一個實現它的那個庫
在運行這個函數後,就只能使用jQuery變量訪問jQuery對象。

2、02-JQueryDOM操做及其餘函數


使用$()直接建立一個標籤節點

將建立好的節點,插入到指定位置。

在#div1內部的最後,直接插入一個節點。

$("#div1").append("<p>這是被插入的p標籤</p>");
把新節點插入到#div1中
$("<p>這是被插入的p標籤</p>").appendTo("#div1");
在#div1內部的開頭,直接插入一個節點。
$("#div1").prepend("<p>這是被插入的p標籤</p>");
$("#div1").after("<p>這是被插入的p標籤</p>");
$("<p>這是被插入的p標籤</p>").insertBefore("#div1");
把每一個p標籤外面,都包裹一層div
$("p").wrap("<div></div>");
/ 把全部的p標籤,包裹在同一個div中
$("p").wrapAll("<div></div>");
把#div1裏面的全部子元素,用<div>包裹起來
$("#div1").wrapInner("<div></div>");

刪除元素的父標籤

$("#p").unwrap();
將全部匹配的p標籤,所有換爲span標籤
$("p").replaceWith("<span>111</span>");
用span元素,替換掉全部p標籤
$("<span>111</span>").replaceAll("p");
刪除#div1中的全部子元素。 可是#div1依然保留空標籤
$("#div1").empty();
直接從DOM中,刪除#div1以及全部子元素
$("#div1").remove();
直接從DOM中,刪除#div1以及全部子元素
$("#div1").detach();
重點 【remove和detach異同】
一、相同點:
① 都會把當前標籤,以及當前標籤的全部子節點,所有刪除;
② 均可以在刪除時,把當前節點返回。並可使用變量接受返回的節點,以便後期恢復;

二、 不一樣點:

使用接受的節點,恢復原節點時。
remove只能恢復節點的內容,可是事件綁定,不能再恢復;
detach不但恢復節點的內容,還能再恢復 事件的綁定;
 
案例 ↓
$("#div1").click(function(){ alert(1); }) var div1 = null; $("button:eq(0)").click(function(){ div1 = $("#div1").remove(); }) $("button:eq(1)").click(function(){ div1 = $("#div1").detach(); }) $("button:eq(2)").click(function(){ $("button:eq(2)").after(div1); });

重點 [JS中.cloneNode() 和 JQ中 .clone()區別]

二者都接受傳入true/false的參數。

.cloneNode() 不傳參數或傳入參數false,表示只克隆當前節點,而不克隆子節點。 傳入true表示可隆所有子節點。

.clone() 不管傳入哪一個參數,都會克隆全部子節點。可是,不傳參數或者傳入false,表示只克隆節點,不克隆節點綁定的事件。 傳入true表示同時克隆及誒單綁定的事件。
 
$("#div1").clone(true).empty().insertBefore("button:eq(0)")

CSS和屬性相關操做

使用attr()設置或者取到元素的某個屬性。

 
//$("#div1").attr("class","cls1"); /*$("#div1").attr({ //使用attr一次性設置多個屬性 "class" : "cls1", "name" : "name1", "style" : "color:red;" });*/ console.log($(".p").attr("id")); 刪除元素屬性 $("#div1").removeAttr("class"); 
prop與Attr區別。
對於checked/disabled等屬性名等於屬性值的屬性,使用prop返回的將是true或false, 使用attr返回的將是屬性名或者undefined
因此,對於屬性名等於屬性值,或者屬性是true/false的特殊屬性,一般使用prop選取。 其餘的屬性,一般使用attr選取。
console.log($("button:eq(2)").attr("disabled")); console.log($("button:eq(2)").prop("disabled"));
給元素添加class屬性,與attr添加class的不一樣是,使用addClass添加的新類名,將會保留原來已有的class名。
$("p").addClass("selected1 selected2");
刪除掉元素指定的class
$("p").removeClass("selected1");
元素有指定class名,則刪除; 元素沒有指定class名,則新增。
$("p").toggleClass("selected1");
取到或設置元素裏面的html,至關於innerHTML
console.log($("#div1").html());
$("#div1").html("<h1>我是新的h1</h1>"); 

取到或設置元素裏面的文字內容,至關於innerText

console.log($("#div1").text());
$("#div1").text("<h1>我是新的h1</h1>");

獲取或設置 元素的Value值

console.log($("input[type='text']").val());
$("input[type='text']").val("嘖嘖嘖!");
給元素設置CSS樣式屬性 屬於style行級樣式表權限
$("#div1").css({
"color":"red", "user-select":"none", "text-stroke":"0.5px blue" }); var id = setInterval(function(){ $("#div1").css({ "width":function(index,value){ if(parseFloat(value)+10 >= 600){ clearInterval(id); } return parseFloat(value)+10+"px"; } }); },500);
 獲取和設置元素的width和height屬性
console.log($("#div1").height());
console.log($("#div1").width()); $("#div1").width("400px");

獲取元素的內部寬度。 包括寬高和padding

console.log($("#div1").innerHeight());
console.log($("#div1").innerWidth());

獲取元素的外部寬高。 包括寬高+padding+border

傳入參數爲true時,還要包括margin
 
console.log($("#div1").outerHeight(true)); console.log($("#div1").outerWidth()); 
offset():
獲取元素,相對於瀏覽器窗口左上角的偏移位置。
這個位置,包括margin/position等。
返回的是一個對象,包含兩個屬性,分別是left和top

position():

獲取定位元素,相對於父元素的偏移位置(父元素必須是定位元素)。
這個位置,只包括top/left等定位屬性。 而margin將被視爲當前元素的一部分,並不會視爲偏移量範疇。
 
若是父元素有定位屬性。則相對於父元素padding左上角定位;
若是父元素沒有定位屬性,則與offerSet同樣 ,相對於瀏覽器左上角定位(可是,只是二者的定位原點都在瀏覽器左上角。 在計算偏移量時,offerSet會計算margin和top. 而position只計算top)。

3、JQuery 事件及動畫


 

【綁定事件的方式】
一、綁定事件的快捷方式。
$("button").eq(0).click(function () { alert("快捷綁定!"); })

缺點:綁定的事件沒法取消!

二、使用on()綁定事件 :
① 使用on進行單事件綁定;
$("button:eq(0)").on ("click",(function () { alert("這是使用on綁定的事件!"); });
② 使用on,一次性給同一個節點,添加屢次事件;多個事件之間,用空格分隔!
$("button:eq(0)").on ("click dbclick",(function () { alert("這是使用on綁定的事件!"); });
③ 使用on,同一次給一個節點添加多個事件,分別執行不一樣的函數。
$("button:eq(0)").on ({
"click":function () { alert("執行了click事件!") }, "mouseover":function () { alert("執行了mouseover事件!") } });
④ 調用函數時,同時給函數傳入指定參數:
$("button:eq(0)").on ("click",{name:"wq",age:23},(function (evn) { alert(evn); });
⑤ 使用on進行事件委派!!! 重點問題!!!
 
>>>將本來須要綁定到子元素上的事件,綁定到其祖先節點乃至根節點上面,在委派給子元素節點,生效!
eg: $("p").on("click",function(){});
事件委派 以下:
$("document").on("click","p",function(){});
>>>做用:
不使用事件委派的綁定方式,只能將事件綁定到初始化時的子元素標籤上,
當頁面新增同類型標籤時,這些新增的標籤上,沒有以前綁定的事件。
而 使用 事件委派時 ,當頁面新增更同類型標籤時,這些新增的事件也具備之同類型前標籤所綁定的事件!
 
三、off()取消事件綁定
$("p").off("click"):取消單事件綁定
$("p").off("click mouseover dbclick"):取消多事件綁定 $(document).off("click","p"):取消委派事件綁定 $("p").off()取消全部的事件綁定
四、使用.one()綁定的事件,只能執行一次;
eg:
$("button").one("click",function () { alert("one作的 只能點一次!") })
五、.trigger()自動 觸發某元素事件;
第一個參數:是須要觸發的事件類型;
第二個參數:(可選)數組格式,表示傳遞給事件函數的參數;
>>>傳遞進來的參數,能夠在事件函數中,定義形參進行獲取
(形參第一個必須是event事件,因此從第二個開始爲所傳遞的參數!)
>>> 也能夠直接在函數中,使用arguements對象數組,讀取參數;
 
六、.triggerHandler():功能同上,區別以下:
① .triggerHandler()不能觸發瀏覽器默認的HTML事件,如submit等;
② .trigger()能夠觸發頁面中全部匹配元素的事件;
而.triggerHandler()只能觸發第一個匹配元素的事件;
③ .trigger()的返回值,返回的是調用當前函數的對象,符合JQuery的可鏈式語法;
.triggerHandler()返回的是事件函數的返回值,若是事件函數沒有返回值,則返回的是Undefined;
  JQuery動畫
 一、.show() 讓隱藏的元素顯示,效果爲同時修改元素的寬度、高度、opacity屬性;
① 不傳參數:直接顯示,不進行動畫;
② 傳參: 參數爲時間毫秒數,表示動畫多少時間結束;
③ 傳入(時間,函數)表示動畫完成以後,執行回調函數;
.hidde() 讓顯示的元素隱藏,與show相反;
 
二、.slideDown() 讓隱藏的元素顯示,效果爲從上往下,逐漸增長高度;
.slideUp() 讓顯示的元素隱藏,效果爲從下往上,逐漸減小高度;
.slideToggle():讓顯示的元素隱藏,讓隱藏的元素顯示;
 
三、.fadeIn() 讓隱藏的元素淡入顯示。
.fadeOut() 讓顯示的元素淡入隱藏。
.fadeToggle() 讓隱藏的元素淡入顯示,讓顯示的元素淡入隱藏。
.fadeTo(動畫總時間,結束時透明度,函數)接受的第二個參數,表示最終達到的透明度;
 
四、animate: ({最終的樣式屬性,鍵值對對象},
動畫事件,動畫效果("linear","swing"),
動畫執行完後的回調函數)
自定義動畫的注意事項:
① 參數一的對象中,鏈必須使用駝峯法命名。{fontSzie:"18px"}
② 只有數值類型的屬性可使用動畫效果。
 

4、JQuery 高級  Ajax


 

臺與服務器進行少許數據交換,AJAX 可使網頁實現異步更新。這意味着 能夠在不從新加載整個網頁的狀況下,對網頁的某部分進行更新。
傳統的網頁(不使用 AJAX)若是須要更新內容,必需重載整個網頁面。
不少使用 AJAX 的應用程序案例:新浪微博、Google 地圖、開心網、百度搜索等等。
 
 
2、AJAX是基於現有的Internet標準
AJAX是基於現有的Internet標準,而且聯合使用它們:
  • XMLHttpRequest 對象 (異步的與服務器交換數據)
  • JavaScript/DOM (信息顯示/交互)
  • CSS (給數據定義樣式)
  • XML (做爲轉換數據的格式,如今基本上被淘汰了,大多數狀況下使用JSON數據格式
  AJAX應用程序與瀏覽器和平臺無關的!
3、AJAX的應用函數:
一、.load() 載入遠程 HTML 文件代碼並插入至 DOM 中。
能夠只傳入一個參數,表示加載一個靜態的HTML代碼片斷。
默認使用 GET 方式 - 傳遞附加參數時自動轉換爲 POST 方式。
eg:
$("#div1").load("load.html",{參數},function () {對參數進行函數處理});
 
二、$.ajax() 經過 HTTP 請求加載遠程數據。jQuery 最底層 AJAX 實現函數。
接受一個大的對象。對象裏面的屬性和方法,表示ajax請求的相關設置:
① url:被請求的遠程文件的路徑。
② Ajax請求的類型,可選值get/post.
•success: 請求成功的回調函數。接受一個參數data,表示後臺返回的數據。
•dataType:預期服務器返回的數據類型。
"json": 返回 JSON 數據 。
"text": 返回純文本字符串
•data:對象格式。向後臺發送一個對象,表示傳遞的數據。
經常使用於type爲post的請求方式。
若是type爲get,可使用?直接追加載URL後面。
•error:請求失敗時的回調函數
•statusCode:接受一個對象,對象的鍵值對是status狀態碼和對應的回調函數,
表示當請求狀態碼是對應數字時,執行具體的操做函數.
404 - 頁面沒有找到!
200 - 請求成功!
500 - 內部服務器錯誤!
三、 $.get(); $.post(); 這兩個函數,是在$.ajax()的基礎上進行封裝而來。能夠直接默認發送get請求或post請求;
 
接受四個參數:
① 請求的URL路徑。 至關於$.ajax()裏面的url;
② 向後臺傳遞的數據。 至關於$.ajax()裏面的data;
③ 請求成功的回調函數。 至關於$.ajax()裏面的success;
④ 預期返回的數據類型。 至關於$.ajax()裏面的dataType;
四、 AJax的各類監聽事件:
ajaxStart--->ajaxSend--->ajaxSuccess/ajaxError/ajaxComplete--->ajaxStop
 
$(document).ajaxSend(function(){
alert("ajax請求發送") }); $(document).ajaxStop(function(){ alert("ajax請求中止") }) $(document).ajaxStart(function(){ alert("ajax請求開始") }) $(document).ajaxSuccess(function(){ alert("ajax請求成功") }) $(document).ajaxError(function(){ alert("ajax請求失敗") }) $(document).ajaxComplete(function(){ alert("ajax請求完成(無論成功失敗,都會死乞白賴出來)") })

 


五、 序列化表單數據的一些操做:
①、 序列化表單數據爲一個字符串
$("#btn1").click(function(){ var str = $("#form1").serialize(); console.log(str); //str = name=jianghao&password=123&email=1234123 var arr = str.split("&"); console.log(arr); var obj = {}; for (var i=0; i<arr.length; i++) { var arr1 = arr[i].split("="); var keys = arr1[0]; var values = arr1[1]; obj[keys] = values; } console.log(obj); $.get("01-JQuery基礎.html?"+str,obj,function(){ }) })

 


二、序列化表單數據爲一個數組
$("#btn2").click(function(){ var arr = $("#form1").serializeArray(); console.log(arr); var obj = {}; for (var i=0; i<arr.length; i++) { var keys = arr[i].name; var values = arr[i].value; obj[keys] = values; } console.log(obj); });
三、 $.parseJSON(str) 將JSON字符串轉爲JSON對象
標準的JSON字符串,鍵必須用雙引號包裹。
var str = '{"age":12}'
var obj = $.parseJSON(str); console.log(obj);
四、 .trim() 去除掉字符串兩端空格
var str1 = " 123 "; console.log(str1.trim());
五、 用戶遍歷數組和對象
遍歷數組時,函數的第一個參數是下標,第二個參數是值;
遍歷對象時,函數的第一個參數是鍵,第二個參數是值
var arr = [1,2,3,4,5,6,7]; var obj = { name : "zhangsan", age : 12, sex : "nan" } $.each(obj,function(index,item){ console.log(index); console.log(item); });

 


5、JQuery插件 plugin


 一、fullpage插件


一、fullpage插件簡介:

 

fullPage.js 是一個基於 jQuery 的插件,它可以很方便、很輕鬆的製做出全屏網站,主要功能有:
  • 支持鼠標滾動
  • 支持前進後退和鍵盤控制
  • 多個回調函數
  • 支持手機、平板觸摸事件
  • 支持 CSS3 動畫
  • 支持窗口縮放
  • 窗口縮放時自動調整
  • 可設置滾動寬度、背景顏色、滾動速度、循環選項、回調、文本對齊方式等等
二、引入文件
fullPage.js必須在JQuery.js文件以後導入!

 

三、htm基本樣式:

 

在fullPage中,class爲section表示一個屏幕。
section不能執行包裹在body中,必須使用一個div包裹全部的section。
section中的每個slide表示一個橫向幻燈片,可在當前屏中左右橫向切換。
三、CSS樣式寫法無差異
四、JavaScript:

 

五、屬性配置:
①、選項:
 
 
二、回調函數
① afterLoad:當一個頁面加載完成以後觸發
傳遞參數:
anchorLink:當前頁面的錨連接
index:當前頁面的序號,從1開始。
afterLoad:function (anchorLink,index) { console.log(anchorLink); console.log(index); }, //② onLeave:當頁面離開時觸發的函數: /* 接收 index、nextIndex 和 direction 3個參數: index 是離開的「頁面」的序號,從1開始計算; nextIndex 是滾動到的「頁面」的序號,從1開始計算; direction 判斷往上滾動仍是往下滾動,值是 up 或 down */ onLeave:function (index,nextIndex,direction) { console.log(index); console.log(nextIndex); console.log(direction); }, // afterRender 頁面結構生成後的回調函數,或者說頁面初始化完成後的回調函數,執行一次。 // 先執行afterRender 再執行afterLoad: afterRender:function () { console.log("頁面初始化完成了!") }, /* afterSlideLoad:當幻燈片加載完成時執行的函數,接收四個參數 * >>>anchorLink:幻燈片所在的section的錨點 * >>>index:幻燈片所在的section的序號 * >>>slideAnchor:幻燈片自身的錨點(若是沒有顯示slideIdex) * >>>slideIdex:幻燈片自身的序號 */ afterSlideLoad:function (anchorLink,index,slideIndex,direction) { console.log(anchorLink); console.log(index); console.log(slideIndex); console.log(direction); } onSlideLeave 左右移動幻燈片加載以前執行的回調函數,與 onLeave 相似, // 接收 anchorLink、index、slideIndex、direction 4個參數 /* anchorLink:幻燈片所在的section的錨點 index:幻燈片所在的section的序號 slideIndex:當前幻燈片自身的index(從0開始) direction:幻燈片移動的方向left和right nextSlideIndex:即將顯示的幻燈片的index */ onSlideLeave :function function_name () { }

 


2、move插件
一、插件簡介:
Move.js 提供了建立 CSS3 動畫的最簡單的 JavaScript API。
二、使用方法:
<script type="text/javascript" src="js/move.js"></script> 
(move插件並非JQ插件,是原生插件,無需連接jq文件。)
<script type="text/javascript"> document.getElementById('playButton').onclick = function() { move('.box') .set("margin-left","300px") //設置css樣式 .set("margin-top","300px") .add("margin-left", "200px")//add()方法用來增長其已經設置的屬性值。該方法必須數值型值,以便用來增長。 //該方法必須有兩個參數:屬性值和其增量 .sub("margin-left", "200px") //sub()是add()的逆過程,他接受兩個相同的參數,但其值將從屬性值中減去。 .rotate(90)//該方法經過提供的數值做爲參數來旋轉元素。 //當方法被調用的時候經過附加到元素的 transform 屬性上。  .skew(30, 40)//skew()用於調整一個相對於x和y軸的角度。 //該方法能夠被分爲skewX(deg)和skewY(deg)兩個方法 .scale(3, 3) //該方法用於放大或壓縮元素的大小,按照提供的每個值,將調用transform的scale方法 // .then()//用於分割動畫爲兩個集合,並按順序執行。動畫將被分爲兩步,經過then()方法實現分割 .x(300) //設置X軸位置 .y(300) //設置Y軸位置 和添加margin值效果同樣。  .delay(1000) //延時多少毫秒以後執行動畫 .duration('5s')//設置動畫的播放時間。 .end(function() { alert("Animation Over!"); }) //end()該方法用於Move.js代碼片斷的結束,他標識動畫的結束。 //技術上,該方法觸發動畫的播放。該方法接受一個可選的callback回掉函數 }; </script>

 


 
3、validate插件
一、插件簡介
jQuery Validate 插件爲表單提供了強大的驗證功能,讓客戶端表單驗證變得更簡單,同時提供了大量的定製選項,知足應用程序各類需求。該插件捆綁了一套有用的驗證方法,包括 URL 和電子郵件驗證,同時提供了一個用來編寫用戶自定義方法的 API。全部的捆綁方法默認使用英語做爲錯誤信息,且已翻譯成其餘 37 種語言。
二、插件的使用:

三、

 
四、使用示範
$(function () { $("#commentForm").validate({ //rules對象 用於聲明各個input的驗證規則; rules:{ //選擇每一個input時須要先選中該input的name,並對應一個對象設置多條驗證規則; name:{ required:true, minlength:2 }, email:{ required:true, email:true }, url:{ url:true, } }, //messages對象 用於顯示各個input驗證不經過時的提示文字。 //messages對應的各個規則都會有默認的提示,若是沒有特殊須要,無需單獨設置。 messages:{ name:{ required:"這個內容是必填項!", minlength:"這裏最少輸入兩個字符!" }, email:{ required:"這個內容是必填項!", email:"郵箱格式錯誤!" }, url:{ url:"url格式錯誤!", } } }) })
五、特殊用法
 
相關文章
相關標籤/搜索