jQuery:
它是一個使用原生的JS來封裝的常用方法的類庫(解決了瀏覽器的兼容問題)
jQuery非常強大的地方在于它的鏈式寫法(執(zhí)行完成一個方法后返回的結(jié)果依然是一個jQuery對象殖演,這樣就可以繼續(xù)的調(diào)用下一個方法就行了)
$box.css("backfround","lightblue").width(); //可以胸哥,因為.css之后仍是jQuery對象
$box.css("background","lightblue").width().position(); //報錯舶替,因為.width之后是數(shù)字,不是jQuery對象叶撒,不能再執(zhí)行position
jQuery中提供的常用方法
核心:
window.jQuery=window.$=jQuery
(jQuery就是閉包中的私有函數(shù))
var jQuery=function(selector,context){
return new jQuery.fn.init(selector,context);
//可以把這個理解為返回的是一個jQuery類的實例
};
jQuery.fn=jQuery.prototype={
constructor:jQuery
};
jQuery.extend=jQuery.fn.extend=function(){
jQuery.extend; //把它當作一個普通的對象,在對象中增加了extend方法
jQuery,fn.extend; //在它的原型上也增加了一個extend方法
}
selector:[string]選擇器的類型 [object]JS原生的對象(把原生的對象轉(zhuǎn)換為jQuery對象) [function]回調(diào)函數(shù)(等價于我們的$(document).ready...)
context:document(傳遞的是一個原生JS對象能夠上下文砰左,如果是一個jQuery對象歇由,它默認為會把其重構(gòu)為選擇器)
jQuery選擇器:創(chuàng)建jQuery這個類的一個實例(jQuery對象)
在jQuery這個類的原型上定義了很多的屬性和方法,而通過選擇器獲取的每一個實例都可以調(diào)用這些方法:屬性瓮栗、CSS削罩、文檔操作、篩選费奸、動畫弥激、事件...eg:$("*").css();
**把jQuery當做一個普通的對象,在它自己的屬性上增加了一些常用的方法:Ajax愿阐、工具...eg
:$.ajax
extend:擴展微服,向jQuery這個類庫中增加一些其他常用的方法
(1)向jQuery屬性名上擴展(把它當作一個對象),-->作用:完善類庫缨历,給類庫增加核心的方法
jQuery.extend({
aa:function(){
console.log("aa");
}
});
$.aa(); //--->aa
(2)向jQuery原型上擴展(把它當作一個類)--->作用:編寫一些基于jQuery插件
jQuery.fn.extend({
bb:function(){
console.log("bb");
}
});
$().bb(); //-->bb
選擇器:
通過傳遞對應規(guī)則的內(nèi)容(ID以蕴、標簽名糙麦、樣式類名....),獲取到頁面中指定的元素/元素集合
var $oDiv=jQuery("#div1"); //--->$oDiv=$("#div1") -->$===jQuery
1-->jQuery選擇器獲取到的結(jié)果是一個jQuery對象丛肮,可以使用jQuery中提供的那些屬性和方法喳资,但不能直接的使用瀏覽器內(nèi)置的屬性和方法(如clientWidth,getAttribute等)
2--->關于原生JS對象和jQuery對象之間的轉(zhuǎn)換
原生轉(zhuǎn)變?yōu)閖Query:$(原生JS對象)腾供,如$(oDiv)
jQuery轉(zhuǎn)變?yōu)樵?/strong>直接通過索引獲取對應的元素即可
$oDiv[0]===$oDiv.get(0) 都是通過索引來獲取指定位置的元素對象(JS原生對象)
屬性:(常用)
1、jQUery的回調(diào)函數(shù)
var $call=$.Callbacks(); //-->創(chuàng)建一個回調(diào)函數(shù)的列表集合
$call.add(fn1); //-->向集合中增加一個叫做fn1的函數(shù)
$call.fire(100); //-->觸發(fā)fire方法的時候鲜滩,把回調(diào)函數(shù)集合中的方法執(zhí)行伴鳖,并且把對應的參數(shù)值傳遞給對應的方法-->“fn1:100”;
$call.remove(fn1); //-->在集合中移除fn1這個方法
2、$(document).ready(function(){}); <===> $(function(){});
和原生JS中的window.onload對應
window.onload的意思是:當頁面中的HTML結(jié)構(gòu)徙硅、圖片榜聂、文字等所有資源都加載完成后才會觸發(fā)這個行為,并且在一個頁面中它只能執(zhí)行一次嗓蘑,后面編寫的會把前面的覆蓋掉
$(document).ready(function(){});:只要HTML結(jié)構(gòu)加載完成就會觸發(fā)對應的行為须肆,而且在一個頁面中可以使用多次
3、屬性(常用)
--->attr:獲取和設置元素的自定義屬性桩皿,等價于原生JS中的set/getAttribute
$("#div1").attr("haha"); //獲取自定義屬性haha
$(#div1").attr("haha",100); //設置自定義屬性haha的值
$("#div1").attr({ index:1, name:"haha" }); //批量設置自定義屬性
$("#div1").removeAttr("haha"); //移除haha這個自定義屬性
--->prop:獲取和設置元素的屬性(和attr是不同的兩套方式豌汇,兩者之間不能相互混用:用attr設置的只能用attr刪除或修改或獲取,同理用prop設置的泄隔,也只能用prop操作)
prop內(nèi)置的屬性可以在HTML結(jié)構(gòu)中體現(xiàn)出來拒贱,但是不是內(nèi)置的屬性是體現(xiàn)不出來的(但可以獲取到值)
attr與prop的區(qū)別:attr一般都是用來設置和操作元素的自定義屬性的,而prop一般是用來操作元素的內(nèi)置屬性的(尤其是表單元素的操作佛嬉,大部分都在使用prop)
4逻澳、關于jQuery內(nèi)置遍歷機制和手動循環(huán)的方法
--->addClass/removeClass/toggleClass(toggle系列都是之前有就是移除,沒有就是新增):通過jQuery選擇器獲取到一個集合暖呕,然后讓集合直接調(diào)用jQuery中提供的方法斜做,相當于給集合中的每一個元素都調(diào)取了對應的方法(jQuery內(nèi)置循環(huán)操作)
eg:$DivList.addClass("w1"); //給所有div都添加了w1類,不用循環(huán)操作了
each:可以遍歷jQuery集合中的每一項(和數(shù)組的forEach類似)
$DivList.each(function(index,item){
//this->就是我們當前遍歷的這一項的內(nèi)容:item
$(this).addClass("w1");
});
jQuery(selector湾揽,context) context一般不需要傳遞瓤逼,默認是document,但也可以指定具體的上下文來獲取元素
篩選:
1钝腺、eq(index)抛姑、first() 、last()艳狐、hasClass(strClass)(檢測當前的元素中是否包含某一個樣式類名定硝,有則為true)
2、filter毫目、children蔬啡、find:常用的三個篩選方法
filter:同級過濾诲侮,首先通過選擇器獲取一個集合,在獲取的內(nèi)容中再進行二次篩選
$("*",$box).filter(); //什么都沒有箱蟆,所以必須filter中得寫東西
children:子集過濾
find:后代過濾沟绪,$box.find(); //-->結(jié)果是個空集合 ,find中也必須寫東西
-->jQuery這個元素對象的私有屬性中叫做selector這個屬性存儲的值是當前本次查找的選擇器的內(nèi)容空猜;context是當前本次查找的上下文
$("*",$box) //-->context:document selector:"#box *"
$("*",document.getElementById("box") //--->context:div#box selector:"*"
3绽慈、map:遍歷jQuery集合中的每一項,并且可以支持返回值把每一項進行修改辈毯,類似于數(shù)組中的map方法
4坝疼、parent:父親節(jié)點
5、parents:所有的父親節(jié)點(從當前開始一直找到HTML谆沃,把每一項都記錄下來)
6钝凶、next、nextAll唁影、siblings耕陷、prev、prevAll等
CSS:
1据沈、css:獲取或者設置(批量設置)當前元素的樣式值
var $box=$("#box");
$box.css("width"); //一個參數(shù)是獲取
$box.css({ //批量設置
background:"red";
opacity:0.5;
});
2哟沫、offset:不管父級參照物是誰,獲取當前元素距離BODY的偏移距離(top/left);而position:獲取當前元素距離父級參照物的偏移(top/left)
3锌介、scrollTop/scrollLeft:獲取或設置元素的卷去高度/寬度
4南用、width/height:獲取或設置元素的width/height
5、innerWidth/innerHeight:獲取或設置元素可視區(qū)域的寬高(獲取的時候等價于clientWidth/clientHeight)掏湾,設置的時候保留padding的值裹虫,把width的值進行改變(width的值最小是0)
$box.innerWidth(true); //加true是指默認加上margin的值
6、outerWidth/outerHeight:獲取或設置元素可視區(qū)域的寬高(包含邊框)融击;設置具體的值的時候和上面的效果一樣
文檔處理:
1筑公、append:向指定元素的末尾位置追加一個新的元素 容器.append(元素)
appendTo:元素.appendTo(容器)
2、prepend/prependTo:向指定元素的開頭位置追加一個新的元素
3尊浪、after/before:在當前元素的后面/前面追加新的元素
4匣屡、insertAfter/insertBefore:把選擇器獲取到的元素追加到指定元素的前面或者后面
var oDiv=document.createElement("div");
oDiv.id="div5";
$(oDiv).insertAfter($box); //-->把創(chuàng)建的oDiv追加到$box的后面,和$box是同級的
5拇涤、replaceAll(selector):用匹配的結(jié)果替換所有selector匹配的元素
var oDiv=document.createElement("div");
oDiv.id="div5";
$(oDiv).replaceAll("ul"); //頁面中所有的ul都用oDiv給替換了
6捣作、remove:把匹配的結(jié)果在頁面中移除掉
$box.remove(); //把box移除掉
事件:
同一個事件同一個元素可以綁定多個方法
var $box=$("#box");
$box.on("click",function(){
console.log(1); //-->this:當前元素(JS原生對象) $(this):jQuery對象
});
$box.on("click",function(){
console.log(2);
});
效果(動畫):
1、animate():用于創(chuàng)建自定義動畫的函數(shù)鹅士。參數(shù)有四個券躁,分別是目標(最終)元素的屬性值,運動總時長,運動方式(效果:如勻速/非勻速等)也拜,運動完成后執(zhí)行的回調(diào)函數(shù)以舒。
$("#box").animate({left:xxx,top:xxx,...},duration,"linear/swing",function(){});
2、stop:結(jié)束之前正在運行的動畫慢哈,開啟一個新的動畫(結(jié)束上一個動畫蔓钟,下一個動畫緊接著當前位置開始運動的),讓上一個動畫停止
$("#box").stop().animate({},1000,function(){});
3卵贱、delay:延遲
4滥沫、finish:直接讓上一個動畫完成(結(jié)束上一個動畫,并且讓元素快速的到達目標位置键俱,再開始下一個動畫)
5佣谐、fadeIn(淡入)、fadeOut(淡出)方妖、fadeToggle
6、show(顯示)罚攀、hide(隱藏)党觅、toggle
7、slideUp(折起)斋泄、slideDown(展開)杯瞻、slideToggle
Ajax:
$.ajax({
url:"json/test.txt?_="+Math.random(),
type:"get",
dataType:"json", //-->支持"text"、"html"炫掐、"jsonp".....
success:function(data){
console.log(data);
}
});
工具:
1魁莉、each:jQuery中有兩個each,(也有兩個map募胃,和each原理一樣旗唁,只是可以支持返回值)一個是:循環(huán)選擇器獲取得到的jQuery集合中的每一項
$("div").each(function(index,item){
console.log(item);
});
另一個是:循環(huán)數(shù)組、類數(shù)組痹束、對象中的每一項
$.each([12,23,34],function(index,item){
console.log(item);
});
$.each(document.getElementsByTagName("*"),function(index,item){
console.log(item);
});
$.each({name:"gaoqi",age:24},function(index,item){
console.log(item);
});
2检疫、$.makeArray===>listToArray將類數(shù)組對象轉(zhuǎn)換為數(shù)組對象