width() height() ★★★★★javascript
innerWidth() innerHeight() ★★★★★php
outerWidth() outerHeight() ★★★★★css
參數的做用html
與原生JS的區別java
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title></title> <style> #div1 {width: 100px; height: 100px; background: red; padding: 10px; margin:10px; border: 1px solid #000;} </style> <script src="http://apps.bdimg.com/libs/jquery/2.1.1/jquery.min.js"></script> <script> $(function(){ alert($('#div1').width()); //100 不帶單位 //width() => width alert($('#div1').innerWidth()); //120 //innerWidth() => width + padding alert($('#div1').outerWidth()); //122 //outerWidth() => width + padding + border alert($('#div1').outerWidth(true)); //142 //outerWidth(true) => width + padding + border + margin }) </script> </head> <body> <div id="div1">div</div> </body> </html>
<script> $(function(){ //$('#div1').width(200); //設置了style中的width //$('#div1').innerWidth(200); //padding左右是20;而後總共是200,那麼style中的width就是180 => width: 200 - padding //$('#div1').outerWidth(200); //padding左右是20;border左右是2;總共200,那麼width就是178 => width: 200 - padding - border $('#div1').outerWidth(200, true); //width: 200 - padding - border - margin爲168 }) </script>
$(function(){ alert($('#div1').get(0).offsetWidth); //0 原生的JS是獲取不到隱藏元素的尺寸的 alert($('#div1').width()); //100 JQ是能夠獲取隱藏元素的尺寸的 })
可視區的尺寸
頁面的尺寸jquery
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>可視區的尺寸</title> <style> body {margin: 0; padding: 0;} #div1 {width: 100px; height: 100px; background: red; display: none; } </style> <script src="http://apps.bdimg.com/libs/jquery/2.1.1/jquery.min.js"></script> <script> $(function(){ alert($(window).height()); //可視區的高 alert($(document).height()); //頁面的高 //若是沒有給body清margin和padding,獲得的是2016;若是清掉了,獲得的就是2000 }) </script> </head> <body style="height: 2000px;"> <div id="div1">div</div> </body> </html>
scrollTop() ★★★★★scr
ollLeft() ★
滾動距離ajax
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>可視區的尺寸</title> <style> body {margin: 0; padding: 0;} #div1 {width: 100px; height: 100px; background: red; display: none; } </style> <script src="http://apps.bdimg.com/libs/jquery/2.1.1/jquery.min.js"></script> <script> $(function(){ $(document).click(function(){ alert($(document).scrollTop()); //獲取滾動距離 //當滾動條滾到最底部的時候 $(document).scrollTop() == $(document).height() - $(window).height() $(document).scrollTop(300); //設置滾動距離 }) }) </script> </head> <body style="height: 2000px;"> <div id="div1">div</div> </body> </html>
offset() ★★★★★json
left top
position() ★★★數組
left top
不認margin值app
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>到達頁面的距離:offset()</title> <style> body {margin: 0; padding: 0;} #div1 {width: 200px; height: 200px; background: red; margin: 200px; position: relative; } #div2 {width: 100px; height: 100px; margin: 50px; background: yellow; } </style> <script src="http://apps.bdimg.com/libs/jquery/2.1.1/jquery.min.js"></script> <script> $(function(){ //offset()的距離值都是相對於整個頁面的 alert($('#div1').offset().left); //200 元素距離整個頁面左邊的距離是offset().left,top就是距離整個頁面上邊的距離。注意left和top後面都不加括號。 alert($('#div2').offset().left); //250 不論怎樣嵌套,定位父級是誰,都是到達頁面邊緣的距離。這個與原生的offsetLeft和offsetTop不一樣。原生的相對於定位的祖先節點的距離。 }) </script> </head> <body style="height: 2000px;"> <div id="div1"> <div id="div2"></div> </div> </body> </html>
alert($('#div2').position().left); //0
#div2 {width: 100px; height: 100px; position: relative; left: 50px; background: yellow;} <script> $(function(){ alert($('#div2').position().left); //50 //position()就是到有定位的祖先節點的距離 }) </script>
利用計算原理,獲得相應值
offsetParent() ★
例子:懶加載頁面中的圖片
計算出到有定位的祖先節點的距離
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title></title> <style> body {margin: 0; padding: 0;} #div1 {width: 200px; height: 200px; background: red; margin: 200px; position: relative; } #div2 {width: 100px; height: 100px; margin: 50px; background: yellow;} </style> <script src="http://apps.bdimg.com/libs/jquery/2.1.1/jquery.min.js"></script> <script> $(function(){ alert($('#div2').offset().left - $('#div2').offsetParent().offset().left); //50 //經過計算的方法得到到達有定位的祖先元素的距離,不論是不是由margin產生的,所以規避了position()不認margin的問題 }) </script> </head> <body style="height: 2000px;"> <div id="div1"> <div id="div2"></div> </div> </body> </html>
懶加載圖片
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title></title> <style> body {margin: 0; padding: 0;} div {margin-top: 300px; width: 470px; height: 150px; border: 1px #000 solid;} </style> <script src="jquery-1.11.1.js"></script> <script> $(function(){ toChange(); $(window).scroll(toChange); function toChange(){ $('img').each(function(i, elem){ if($(elem).offset().top < $(window).height() + $(document).scrollTop()){ //若是圖片進入了可視區 $(elem).attr('src', $(elem).attr('_src')); } }); } }) </script> </head> <body> <div><img _src="img/1.jpg" alt=""></div> <div><img _src="img/2.jpg" alt=""></div> <div><img _src="img/3.jpg" alt=""></div> <div><img _src="img/4.jpg" alt=""></div> <div><img _src="img/5.jpg" alt=""></div> <div><img _src="img/6.jpg" alt=""></div> </body> </html>
on() ★★★★★
off() ★★★★★
JQ中都是綁定的形式
支持多事件寫法
click()寫法,也是採用off()取消
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>jQuery中的事件</title> <script src="jquery-1.11.1.js"></script> <script> //在JQ中的事件操做都是綁定的形式 $(function(){ //原生中有的事件均可以像下面這麼用(去掉on) //$('#div1').click(function(){alert(123);}); //$('#div1').mouseover(function(){alert(123);}); //$('#div1').mousedown(function(){alert(123);}); //$('#div1').scroll(function(){alert(123);}) //$('#div1').on('click', function(){alert(123);}) //這就至關於$('#div1').click(function(){alert(123);}) //$('#div1').on('click mouseover', function(){alert(123);}); //經過空格分隔多個事件名稱,能夠同時綁定 }) </script> </head> <body style="height: 2000px;"> <div id="div1">aaaaaa</div> </body> </html>
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>jQuery中的事件</title> <script src="jquery-1.11.1.js"></script> <script> //不管是用on()仍是用click()形式綁定的事件,都是用off()取消的 $(function(){ /* $('#div1').on('click mouseover', function(){ alert(123); $(this).off(); //刪除全部的事件操做 }) */ $('#div1').on('click mouseover', function(){ alert(123); $(this).off('mouseover'); //取消指定的事件 }) }) </script> </head> <body style="height: 2000px;"> <div id="div1">aaaaaa</div> </body> </html>
經常使用性★★★★★
pageX, pageY 與cient的區別
which
target
stopPropagation()
preventDefault()
return false
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>jQuery中的event事件對象</title> <style> #div1 {margin: 200px;} </style> <script src="jquery-1.11.1.js"></script> <script> $(function(){ $('#div1').click(function(ev){ alert(ev.pageY); //鼠標的y座標 //ev.pageX和ev.pageY始終是相對於整個頁面的 alert(ev.clientY); //鼠標的y座標 //ev.clientX和ev.clientY始終是相對於可視區的 }) }) </script> </head> <body style="height: 2000px;"> <div id="div1">aaaaaa</div> </body> </html>
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>jQuery中的event事件對象</title> <style> #div1 {margin: 200px;} </style> <script src="jquery-1.11.1.js"></script> <script> //ev.which是鍵盤的鍵值 $(function(){ $(document).keydown(function(ev){ alert(ev.which); //頁面上按下按鍵,彈出鍵盤鍵值 //alert(ev.keyCode); //也能夠彈出鍵盤鍵值 //alert(ev.ctrlKey); //能夠檢測是否ctrl鍵是按下的 }) }) </script> </head> <body style="height: 2000px;"> <div id="div1">aaaaaa</div> </body> </html>
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>jQuery中的event事件對象</title> <style> #div1 {margin: 200px;} </style> <script src="jquery-1.11.1.js"></script> <script> //ev.target 當前目標元素,也就是事件源 $(function(){ $(document).click(function(ev){ //alert(this); //這個this老是指向document alert(ev.target); //若是點擊到a上,那麼彈出的就是#div1這個元素 }) }) </script> </head> <body style="height: 2000px;"> <div id="div1">aaaaaa</div> </body> </html>
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>jQuery中的event事件對象</title> <style> #div1 {margin: 200px;} </style> <script src="jquery-1.11.1.js"></script> <script> //stopPropagation():阻止冒泡 $(function(){ $(document).click(function(){ alert(123); }) $('#div1').click(function(ev){ ev.stopPropagation(); //阻止了#div1的事件冒泡,那麼點擊#div1就不會再彈出123了 }) }) </script> </head> <body style="height: 2000px;"> <div id="div1">aaaaaa</div> </body> </html>
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>jQuery中的event事件對象</title> <style> #div1 {margin: 200px;} </style> <script src="jquery-1.11.1.js"></script> <script> //ev.preventDefault():阻止默認事件 $(function(){ $(document).contextmenu(function(ev){ //點擊右鍵就不會彈出默認右鍵菜單了 ev.preventDefault(); }) }) </script> </head> <body style="height: 2000px;"> <div id="div1">aaaaaa</div> </body> </html>
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>jQuery中的event事件對象</title> <style> #div1 {margin: 200px;} </style> <script src="jquery-1.11.1.js"></script> <script> //在事件函數中寫return false表明:既阻止默認事件又阻止冒泡 $(function(){ $(document).contextmenu(function(ev){ //代碼 return false; }) }) </script> </head> <body style="height: 2000px;"> <div id="div1">aaaaaa</div> </body> </html>
屢次添加on的處理方式
例子:拖拽效果
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>屢次添加on的處理方式</title> <style> </style> <script src="jquery-1.11.1.js"></script> <script> $(function(){ /* //如下這種形式,若是屢次點擊#div1後再點擊#span1,會發現1會彈出屢次,這是由於經過屢次點擊#div1,使得#span1屢次調用了click事件 $('#div1').click(function(){ $('#span1').click(function(){ alert(1); }) }) */ //解決以上問題的方法 $('#div1').click(function(){ $('#span1').off('click').click(function(){ alert(1); }) }) }) </script> </head> <body style="height: 2000px;"> <div id="div1">aaaaaa</div> <span id="span1">span</span> </body> </html>
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>用JQ實現拖拽</title> <style> * {margin: 0; padding: 0;} #div1 {width: 100px; height: 100px; background: red; position: absolute; left: 100px; top: 100px;} </style> <script src="jquery-1.11.1.js"></script> <script> $(function(){ var disX = 0; var disY = 0; var $div = $('#div1'); $div.on('mousedown', function(ev){ disX = ev.pageX - $(this).offset().left; disY = ev.pageY - $(this).offset().top; $(document).on('mousemove', function(ev){ $div.css('left', ev.pageX - disX); $div.css('top', ev.pageY - disY); }) $(document).on('mouseup', function(){ $(this).off(); }) return false; }) }) </script> </head> <body style="height: 2000px;"> <div id="div1">div</div> </body> </html>
委託的好處
ev.delegateTarget
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>事件委託</title> <style> </style> <script src="jquery-1.11.1.js"></script> <script> $(function(){ /* 普通寫法,click加到li身上 $('li').on('click', function(){ $(this).css('background', 'red'); }) */ //事件委託的寫法 //click加到了ul身上 $('ul').delegate('li', 'click', function(ev){ $(this).css('background', 'red'); //this指向觸發的li $(ev.delegateTarget).css('background', 'green'); //這時候的ev.delegateTarget指向的就是$('ul') }) //事件委託的好處: //1. 性能更好 //2. 對後續添加的元素,能夠直接擁有一些操做行爲 //3. 事件委託的時間函數中的this指向的是委託的元素 要想找到是誰進行委託的,那個元素是哪一個,能夠用ev.delegateTarget來找到。 $('#input1').click(function(){ var $li = $('<li>hello</li>'); $('ul').append($li); }) //後來添加的li照樣有click事件,這是經過事件委託實現的。若是用普通寫法,新添加的li是沒有click事件的。 }) </script> </head> <body style="height: 2000px;"> <input id="input1" type="button" value="添加"> <ul> <li>11111</li> <li>11111</li> <li>11111</li> <li>11111</li> <li>11111</li> </ul> </body> </html>
取消委託
比click()形式更強大
事件的命名空間
例子:主動觸發的添加內容
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>事件的命名空間</title> <style> </style> <script src="jquery-1.11.1.js"></script> <script> // trigger(): 主動觸發 $(function(){ $('ul').delegate('li', 'click', function(){ $(this).css('background', 'red'); //this指向觸發的li }) $('#input1').click(function(){ var $li = $('<li>'+ $('#input2').val() +'</li>'); $('ul').append($li); }) $('#input2').keydown(function(ev){ if(ev.which == 13){ $('#input1').trigger('click'); //點擊回車的時候,就主動觸發#input1的click事件 //$('#input1').click(); 這種寫法就至關於上面的那種寫法 } }) }) </script> </head> <body style="height: 2000px;"> <input id="input1" type="button" value="添加"><input id="input2" type="text"> <ul> <li>11111</li> <li>11111</li> <li>11111</li> <li>11111</li> <li>11111</li> </ul> </body> </html>
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>事件的命名空間</title> <style> </style> <script src="jquery-1.11.1.js"></script> <script> $(function(){ $('div').on('click', function(){ alert(1); }) $('div').on('click.abc', function(){ //注意,這裏click後面有個.abc 這就是命名空間 alert(2); }) $('div').trigger('click.abc'); //只主動觸發div上命名空間爲abc的click事件 }) </script> </head> <body style="height: 2000px;"> <div>div</div> </body> </html>
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>事件的命名空間</title> <style> * {margin: 0; padding: 0;} #div1 {width: 100px; height: 100px; background: red; position: absolute; left: 100px; top: 100px;} </style> <script src="jquery-1.11.1.js"></script> <script> $(function(){ var disX = 0; var disY = 0; var $div = $('#div1'); $div.on('mousedown', function(ev){ disX = ev.pageX - $(this).offset().left; disY = ev.pageY - $(this).offset().top; $(document).on('mousemove.drag', function(ev){ $div.css('left', ev.pageX - disX); $div.css('top', ev.pageY - disY); }) $(document).on('mouseup.drag', function(){ //$(this).off('mousemove.drag').off('mouseup.drag'); //這種寫法和下面的寫法均可以 $(this).off('.drag'); //注意:off()中能夠只添加命名空間,可是trigger()中的命名空間前面必需要添加事件名才行 }) return false; }) }) </script> </head> <body style="height: 2000px;"> <div id="div1">div</div> </body> </html>
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title></title> <style> </style> <script src="http://apps.bdimg.com/libs/jquery/2.1.1/jquery.min.js"></script> <script> $(function(){ var a = [1, 2, 3]; var b = [4, 5, 6]; var c = $.merge(a, b); //$.merge只能是兩個參數 console.log(c); //[1, 2, 3, 4, 5, 6] }) </script> </head> <body> </body> </html>
★★★★★比原生typeof更強大
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>$.type()</title> <style> * {margin: 0; padding: 0;} #div1 {width: 100px; height: 100px; background: red; position: absolute; left: 100px; top: 100px;} </style> <script src="jquery-1.11.1.js"></script> <script> //$().css() $().html() $().click(); //這些方法都是針對JQ對象的,針對原生是不能調用這些方法的 //$.XXX() $.YYY() $.ZZZ(); //這些方法前面只有一個$ 這些就是工具方法:既能夠給JQ對象用,也能夠給原生JS用 //好比:$.XXX($('div'))和$.XXX(oDiv) 這兩種寫法均可以 $(function(){ // $.type(): 查看變量的類型 /* var a = 'hello'; alert(typeof a); //string alert($.type(a)); //string */ /* var a = [1, 2, 3]; alert(typeof a); //object alert($.type(a)); //array */ /* var a = new Date; alert(typeof a); //object alert($.type(a)); //date */ /* var a = null; alert(typeof a); //object alert($.type(a)); //null */ var a = {}; alert(typeof a); //object alert($.type(a)); //object }) </script> </head> <body style="height: 2000px;"> <div id="div1">div</div> </body> </html>
$.isFunction() ★★★
$.isNumeric() ★★★
$.isArray() ★★★
$.isWindow() ★★★
$.isEmptyObject() ★★★
$.isPlainObject() ★★★
對象繼承操做
深拷貝操做
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>$.extend() 對象的拷貝</title> <script src="jquery-1.11.1.js"></script> <script> $(function(){ /* var a = { name: 'hello' }; var b = a; b.name = 'hi'; alert(a.name); //hi 對象引用,b.name更改後,a也收到了影響。由於a、b在同一個指針上 */ /* $.extend進行淺拷貝 var a = { name: 'hello' }; var b = {}; $.extend(b, a, {age: 20}); //把從第二個參數開始,把後面全部的都像第一個參數進行拷貝 console.log(b); b.name = 'hi'; alert(a.name); //a沒有受到影響 */ /* $.extend默認是淺拷貝 var a = { name: {age: 20} }; var b = {}; $.extend(b, a); b.name.age = 30; alert(a.name.age); //30 a又受到了影響,由於$.extend()默認爲淺拷貝,就是指拷貝一層 */ //經過添加參數true實現$.extend的深拷貝 var a = { name: {age: 20} }; var b = {}; $.extend(true, b, a); //經過添加參數true實現深拷貝 b.name.age = 30; alert(a.name.age); //20 深拷貝就是指無論多少層,都不會影響到以前的對象 }); </script> </head> <body> </body> </html>
兩處傳參的的區別
$.proxy()改變this指向的用法
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>$.proxy改變this指向</title> <script src="jquery-1.11.1.js"></script> <script> $(function(){ // $.proxy(): 改this指向 function show(){ alert(this); } //show(); //this是指向window的 //show.call(document); //讓this指向document //如下是經過$.proxy()方法來改變this指向 $.proxy(show, document); //讓show函數中的this指向document,只改變指向,並無調用 $.proxy(show, document)(); //後面加一對小括號纔算是調用了,這時候彈出的就是document }); </script> </head> <body> </body> </html>
用$.proxy()傳參的用法
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>$.proxy改變this指向</title> <script src="jquery-1.11.1.js"></script> <script> $(function(){ function show(n1, n2){ alert(n1); alert(n2); alert(this); } $.proxy(show, document)(3, 4); //後面加一對小括號纔算是調用了,這時候彈出的就是document //也能夠寫成以下形式: $.proxy(show, document, 3, 4)(); //也能夠寫成以下形式: $.proxy(show, document, 3)(4); }); </script> </head> <body> </body> </html>
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>$.proxy改變this指向</title> <script src="jquery-1.11.1.js"></script> <script> $(function(){ function show(n1, n2){ alert(n1); alert(n2); alert(this); } //$(document).on('click', $.proxy(show, window)(3,4)); //這樣寫show函數就直接調用了,因此要寫成下面的形式 $(document).on('click', $.proxy(show, window, 3, 4)); }); </script> </head> <body> </body> </html>
利用This改指向,更加方便
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>$.proxy改變this指向</title> <style> #div1 {width: 100px; height: 100px; border: 1px solid #000; } </style> <script src="jquery-1.11.1.js"></script> <script> $(function(){ $('#div1').on('click', function(){ /* setTimeout(function(){ //$(this).css('background', 'red'); 這樣寫確定是有錯誤的,由於this指向的是window }, 1000); */ //如下是一種比較簡單的改變this指向的方法 var This = this; setTimeout(function(){ $(This).css('background', 'red'); }, 1000); }) }); </script> </head> <body> <div id="div1"></div> </body> </html>
本課練習:登陸彈窗效果
$.map方法也是用來遍歷數組和對象,可是會返回一個新對象
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title></title> <style> </style> <script src="http://apps.bdimg.com/libs/jquery/2.1.1/jquery.min.js"></script> <script> $(function(){ //$.map(數組,回調) var arr = ['a', 'b', 'c']; arr = $.map(arr, function(val, i){ console.log(val); //值 console.log(i); //索引 return val + i //數組就變成['a0', 'b1', 'c2'] //return 'hello' //數組變成['hello', 'hello', 'hello'] }) console.log(arr); }) </script> </head> <body> </body> </html>
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title></title> <style> </style> <script src="http://apps.bdimg.com/libs/jquery/2.1.1/jquery.min.js"></script> <script> $(function(){ var arr = [1, 5, 3, 8, 2]; arr = $.grep(arr, function(val, i){ return val > 4; //返回值大於4的數 爲真就保留,爲假就剔除 }) console.log(arr); //[5, 8] }) </script> </head> <body> </body> </html>
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title></title> <style> </style> <script src="http://apps.bdimg.com/libs/jquery/2.1.1/jquery.min.js"></script> <script> $(function(){ //$.unique() 針對dom節點的去重方法,對數組不起做用 var aDiv = $('div').get(); //要轉成原生 var arr = []; for(var i=0; i<aDiv.length; i++){ arr.push(aDiv[i]); } for(var i=0; i<aDiv.length; i++){ arr.push(aDiv[i]); } //循環了兩次,所以arr裏面出現了一些重複的 arr = $.unique(arr); //去掉了重複的 console.log(arr); }) </script> </head> <body> <div class="box">div</div> <div>div</div> <div>div</div> </body> </html>
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title></title> <style> </style> <script src="http://apps.bdimg.com/libs/jquery/2.1.1/jquery.min.js"></script> <script> $(function(){ //$.inArray() 相似於indexOf()的做用 var arr = ['a', 'b', 'c', 'd'];//1 console.log($.inArray('b', arr)); //'b'在arr中的位置是1,若是沒有出現過的就返回-1 }) </script> </head> <body> <div class="box">div</div> <div>div</div> <div>div</div> </body> </html>
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title></title> <style> </style> <script src="http://apps.bdimg.com/libs/jquery/2.1.1/jquery.min.js"></script> <script> $(function(){ //$.makeArray() 把不是數組的轉成數組 var aDiv = document.getElementsByTagName('div'); //aDiv.push() //會報錯,由於aDiv不是數組 aDiv = $.makeArray(aDiv); aDiv.push(); //此次就不報錯了 console.log(aDiv); var aString = 'hello'; aString = $.makeArray(aString); console.log(aString); }) </script> </head> <body> <div class="box">div</div> <div>div</div> <div>div</div> </body> </html>
用於移除字符串頭部和尾部多餘的空格
$.trim(' Hello ') // Hello
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title></title> <style> </style> <script src="http://apps.bdimg.com/libs/jquery/2.1.1/jquery.min.js"></script> <script> $(function(){ //'key = value$key=value$key=value' ajax中經過這種形式傳到後臺 var obj = {"name": "hello", "age": "20"}; obj = $.param(obj); //自動轉成上述字符串 console.log(obj); //name=hello&age=20 /* $.ajax({ data: {"name": "hello", "age": "20"} //後臺會自動轉成上面拼接的形式 }); */ }) </script> </head> <body> <div class="box">div</div> <div>div</div> <div>div</div> </body> </html>
經常使用度★★★
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title></title> <style> </style> <script src="http://apps.bdimg.com/libs/jquery/2.1.1/jquery.min.js"></script> <script> $(function(){ //serializeArray()是針對form表單中的name和value的實例方法 var a = $('form').serializeArray(); console.log(a); //a就處理成[{name="a", value="1"}, {name="b", value="2"}, {name="c", value="3"}] }) </script> </head> <body> <form action=""> <input type="text" name="a" value="1"> <input type="text" name="b" value="2"> <input type="text" name="c" value="3"> </form> </body> </html>
經常使用度 ★篩選的功能
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title></title> <style> </style> <script src="http://apps.bdimg.com/libs/jquery/2.1.1/jquery.min.js"></script> <script> $(function(){ //load() 給元素裏面添加東西 //$('#div1').load('data.html', function(){}); //回調函數是加載後出發的函數,data.html的內容會直接被添加到指定的元素裏面 $('#div1').load('data.html .box', function(){}); //該函數還有篩選功能,在地址後面加個空格加上.box,那麼在data.html中的.box的內容才能被加到div中來 }) </script> </head> <body> <div id="div1"> </div> </body> </html>
經常使用度★
$.getJSON
經常使用度★
JSONP,不受同源影響
建議直接使用問號
$(function(){ // $.getJson() 動態請求json或JsonP //直接用$.getJSON,咱們就不須要再經過設置dataType: json了 $.getJSON('data.php', function(data){ console.log(data); }); //data.php返給咱們的是一個json格式 })
$.getJSON('data.php?callback=?', function(data){ //data.php返回的是jsonp的形式,咱們就能夠後面添上callback=? 注意其中callback是key值,而問號?是value值。一旦用getJSON時,必定要是用callback=?的。若是給callback指定了名稱,那麼返回的是字符串形式,並非json形式,在getJSON裏面就解析不了,因此就只能走error。因此在$.getJSON()裏面給callback命名是沒有意義的,必定要是用?才能夠自動解析 console.log(data); }).error(function(err){ console.log(err); }); $.ajax({ //在使用ajax的時候,能夠給callback自定義名稱,例以下面定義了「show」 url:'data.php?callback=show', success: function(data){ //返回的數據就是一個相似"show({name: 'hello'})"的字符串,而後再後續處理進行使用 } }) //另外若是在$.ajax()中設置了datatype爲'jsonp',那麼在url的地方是不須要加callback的,由於它會自動添加好
經常使用度★
默認配置
$(function(){ //若是有不少ajax,那麼能夠利用$.ajaxSetup()來進行默認設置 $.ajaxSetup({ type: 'POST' //那麼全部的ajax傳輸類型都改成post了 }); })
全局事件
加到document上,參數的意義$.ajaxStart()
★$.ajaxStop()
★$.ajaxSuccess()
★$.ajaxError()
★$.ajaxComplete()
★$.ajaxSend()
★
屬性 ★
Global, Context
JSONP, jsonpCallback
Cache, Timeout
processData
contentType
ajax參考資料
經常使用度★
防止庫之間衝突
<script> var J = $.noConflict(); var $ = 123; //後面就能夠用J代替$或者jQuery來直接用了 J().css(); J.trim(); </script>
經常使用度★★★
遍歷
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title></title> <style> </style> <script src="http://apps.bdimg.com/libs/jquery/2.1.1/jquery.min.js"></script> <script> $(function(){ //$().each() 只能針對jQuery的集合 //$.each() 工具方法,能夠針對原生的集合,還針對數組和json均可以 var arr = ['a', 'b', 'c']; var obj = {'name': 'hello', 'age': '20'} $.each(arr, function(i, val){ console.log(i); console.log(val); }) $.each(obj, function(i, val){ console.log(i); console.log(val); }) }) </script> </head> <body> <div></div> <div></div> <div></div> </body> </html>
經常使用度★
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title></title> <style> </style> <script src="http://apps.bdimg.com/libs/jquery/2.1.1/jquery.min.js"></script> <script> $(function(){ //end() 回到上一級 //$('div').next().css('background', 'red').end().css('color', 'blue'); //addBack() 不只返回上一層,還會包含本身自己 //$('div').next().css('background', 'red').addBack().css('color', 'blue'); //add() 添加到集合中 $('div').add('span').css('background', 'red').addBack().css('color', 'blue'); }) </script> </head> <body> <div>div</div> <span>span</span> </body> </html>
概念與參數意義
隊列名稱
$(function(){ //$.queue() 三個參數:隊列添加到哪一個元素身上;隊列的名字;第三個參數是一個函數 //$.dequeue() 兩個參數:元素和隊列名字 //JQ中的隊列,存儲的都是函數 //JQ的隊列,當進行出隊的操做的時候,會自動執行相應的函數 function a(){ alert(1); } function b(){ alert(2); } function c(){ alert(3); } $.queue(document, 'myeve', a); $.queue(document, 'myeve', b); $.queue(document, 'myeve', c); $.dequeue(document, 'myeve'); //彈1 $.dequeue(document, 'myeve'); //彈2 $.dequeue(document, 'myeve'); //彈3 })
queue() dequeue()
源碼分析運動隊列
默認隊列名fx
隊列的具體應用基本使用
基本使用
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title></title> <style> div {width: 100px; height: 100px; background: red; position: absolute;} </style> <script src="http://apps.bdimg.com/libs/jquery/2.1.1/jquery.min.js"></script> <script> //JQ中,animate的隊列名稱是'fx' $(function(){ function a(){ $('div').css('background', 'blue'); $('div').dequeue('fx'); //若是不寫這句話的話,隊列就卡在這裏了,無法往下執行了 } $('div').animate({width: 200}); $('div').queue('fx', a); $('div').animate({height: 200}); $('div').animate({left: 200}); }) </script> </head> <body> <div>div</div> </body> </html>
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title></title> <style> div {width: 100px; height: 100px; background: red; position: absolute;} </style> <script src="http://apps.bdimg.com/libs/jquery/2.1.1/jquery.min.js"></script> <script> //JQ中,animate的隊列名稱是'fx' $(function(){ $('div').animate({width: 200}); //$('div').delay(2000); 下面的操做就至關於這一句的操做 $('div').queue('fx', function(){ setTimeout(function(){ $('div').dequeue(); }, 2000) }) $('div').animate({height: 200}); $('div').animate({left: 200}); }) </script> </head> <body> <div>div</div> </body> </html>
基本概念與用法
add
remove
fire
應用場景
四大參數
once
memory
unique
stopOnFalse
$(function(){ function a(){ alert(1); } function b(){ alert(2); } function c(){ alert(3); } var cb = $.Callbacks(); //回調對象 cb.add(a); //a添加到回調對象的集合裏面 cb.fire(); //fire就是觸發 彈出1 cb.add(b); cb.fire(); //彈出1和2 cb.add(c); cb.remove(b); cb.fire(); //彈出1和3 })
用回調對象來解決做用域的問題
$(function(){ var cb = $.Callbacks(); function a(){ alert(1); } (function(){ function b(){ alert(2); } cb.add(a); cb.add(b); })(); // a(); //彈1 //b(); //b這個函數是找不到的,由於做用域裏面沒它 cb.fire(); //彈一、2 })
$(function(){ function a(){ alert(1); } function b(){ alert(2); } function c(){ alert(3); } //參數 once:只能觸發一次 var cb = $.Callbacks('once'); cb.add(a); cb.add(b); cb.fire(); //彈一、2 cb.fire(); //由於添加了參數once,因此前面觸發過一次以後,這裏再也不觸發 })
$(function(){ function a(){ alert(1); } function b(){ alert(2); } function c(){ alert(3); } //參數 memory:無論先後添加的都一塊兒觸發 var cb = $.Callbacks('memory'); cb.add(a); cb.add(b); cb.fire(); //彈一、二、3,由於參數memory,讓觸發時無論前面後面add的都觸發 cb.add(c); })
$(function(){ function a(){ alert(1); } function b(){ alert(2); } function c(){ alert(3); } //參數 unique:去重功能 var cb = $.Callbacks('unique'); cb.add(a); cb.add(a); cb.add(a); cb.add(b); cb.fire(); //彈一、2,而不是彈1,1,1,2 })
$(function(){ function a(){ alert(1); } function b(){ alert(2); return false; } function c(){ alert(3); } //參數 unique:去重功能 var cb = $.Callbacks('stopOnFalse'); cb.add(a); cb.add(a); cb.add(b); cb.add(c); cb.fire(); //彈1,1,2 不談3,由於在b裏面碰到了false就不繼續執行後面的函數c了 })
$(function(){ function a(){ alert(1); } function b(){ alert(2); return false; } function c(){ alert(3); } //回調對象的參數能夠組合使用 var cb = $.Callbacks('once memory'); cb.add(a); cb.add(a); cb.add(b); cb.fire(); //彈1,1,2,3 cb.add(c); cb.fire(); //什麼也不彈 })
經常使用度★★★
基本概念與用法
與Callbacks()對比學習
應用場景
狀態的定義
狀態的映射 resolve, done reject, fail
ajax中的應用 $.when()
利用狀態的應用
$.fn.extend()
this指向
$.extend()
編寫插件基本格式
分析jQuery.e-calendar
配置參數
方法
自定義事件
實例:編寫選項卡插件
<script> $.extend(a); //在$.extend()裏面只寫一個參數的時候,就是說這個a要往jQuery源碼自己身上添加 工具方法(靜態方法) $.fn.extend(); //JQ方法(實例方法) //----------源碼中---------- function $(selector){ return new Jquery(); } $.trim = function(){}; $.type = function(){}; //上面兩行的寫法與下面這個$.extend的寫法是一回事 $.extend({ trim: function(){}, type: function(){} }) function Jquery(selector){ } Jquery.prototype.css = function(attr, value){ } Jquery.prototype.html = function(){ } //上面兩個加載prototype上的實例方法也能夠經過下面的$.fn.extend()來實現,二者是一回事 $.fn.extend({ css: function(){}, html: function(){} }) }); </script>
$(function(){ //$.trim是去掉左右空格,如今擴展一個只去左邊空格的方法 $.extend({ leftTrim: function(str){ //this : 工具方法中 this與$等價 return str.replace(/^\s+/g,''); } }); var str = ' hello '; alert('(' + $.leftTrim(str) + ')'); })
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title></title> <style> div {width: 100px; height: 100px; background: red; position: absolute;} </style> <script src="http://apps.bdimg.com/libs/jquery/2.1.1/jquery.min.js"></script> <script> $(function(){ //$('div').size(); 本身實現如下這個size()的功能 $.fn.extend({ size2: function(){ //實例方法中:this 至關於調用這個方法的 $('div') return this.length; } }); //extend方法能夠擴展多個方法,若是隻擴展一個實例方法,也能夠寫成這樣:$.fn.size2 = function(){}; alert($('div').size2()); }) </script> </head> <body> <div>div1</div> <div>div2</div> <div>div3</div> </body> </html>
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>編寫選項卡的插件</title> <style> #tab div {width: 200px; height: 200px; border: 1px #000 solid; display: none;} #tab .active {background: red;} </style> <script src="http://apps.bdimg.com/libs/jquery/2.1.1/jquery.min.js"></script> <script> //自定義事件: //自定義一個切換前的事件和切換後的事件beforeChange和afterChange $(function(){ //$('#tab').tabs(); $('#tab').tabs({ heads: ['體育', '娛樂', '新聞', '視頻'], bodies: ['體育1111', '娛樂123123', '新聞ffff', '視頻fffggg'], events: 'mouseover' }); $('#tab').on('beforeChange', function(){ alert($('#tab').find('div:visible').html()); }); //把切換前的div內容彈出來 $('#tab').on('afterChange', function(){ alert($('#tab').find('div:visible').html()); }); //把切換後的div內容彈出來 }); (function($){ var defaults = { heads: ['1', '2', '3'], bodies: ['1111111', '2222222', '3333333'], events: 'click' }; var settings = {}; var $parent = null; function fnTab(options){ $parent = this; //$parent就是#tabs settings = $.extend(settings, defaults, options); //有配置走配置,沒配置走默認 create(); bind(); } function create(){ //建立佈局 for(var i=0; i<settings.heads.length; i++){ var $input = $('<input type="button" value="' + settings.heads[i] + '">'); if(i == 0){ $input.attr('class', 'active'); } $parent.append($input); } for(var i=0; i<settings.bodies.length; i++){ var $div = $('<div>' + settings.bodies[i] + '</div>'); if(i == 0){ $div.css('display', 'block'); } $parent.append($div); } } function bind(){ $parent.find('input').on(settings.events, function(){ //這裏就是改變前beforeChange $parent.trigger('beforeChange'); $parent.find('input').attr('class', ''); $(this).attr('class', 'active'); $parent.find('div').css('display', 'none'); $parent.find('div').eq($(this).index()).css('display', 'block'); //這裏就是改變後的afterChange $parent.trigger('afterChange'); }) } $.fn.extend({ tabs: fnTab }) })(jQuery); </script> </head> <body> <div id="tab"> <!-- <input class="active" type="button" value="1"> <input type="button" value="2"> <input type="button" value="3"> <div style="display: block">1111111</div> <div>2222222</div> <div>3333333</div> --> </div> </body> </html>
介紹與實現接口
$() -> find()
通用選擇 *
層級選擇 > + ~
基本篩選 :
animated
:eq()
:even
:odd
:first
:last
:gt()
:lt()
內容篩選
:contains()
:empty
:parent
可見性篩選
:hidden
:visible
子元素篩選
:first-child
:last-child
:first-of-type
:last-of-type
:nth-child()
:nth-of-type()
:only-child
:only-of-type
表單篩選
:button
:checkbox
:radio
:checked
:disabled
:enabled
:selected
filter()not()has()