贊助我以寫出更好的文章javascript
若是您以爲文章對您有幫助,能夠逐個點擊如下連接,相似於Google ads,不須要您付出任何費用,天天均可以來點一次噢,費用將由廣告商承擔,give me a cup of coffee?css
https://app.codesponsor.io/li...html
https://app.codesponsor.io/li...java
https://app.codesponsor.io/li...node
https://app.codesponsor.io/li...jquery
https://app.codesponsor.io/li...webpack
本文僅針對jquery的部分知識點作總結,更爲全面的能夠去官網看中文文檔。能夠更爲詳細的瞭解jquery及其特性。web
我 | window.onload | $(document).ready() |
---|---|---|
執行時機 | 必須等待網頁中全部的內容加載完畢後(包括圖片)才能執行 | 網頁中全部DOM結構繪製完畢後就執行,可能DOM元素關聯的東西並無加載完 |
編寫個數 | 不能同時編寫多個,如下代碼沒法正確執行:window.onload =function({alert("test1");}window.onload = function(){alert("test2");}結果只會輸出"test2" | 能同時編寫多個 |
簡化寫法 | 無 | $(document).ready(function(){});能夠簡寫成$(function(){}); |
(function(){ (21,94) 定義了一些變量和函數 jquery = function(){}; (96,283)給JQ對象,添加一些方法和屬性 (283,347)extend:JQ的繼承方法 (349,817)jQuery.extend():擴展一些工具方法 (887,2859)Sizzle:複雜選擇器的實現 (2880,3042)callbacks:回調對象 (8826)window.jQuery = window.$ = jQuery ; })()
像$("div")返回的就是一個對象,對象後面就能夠添加屬性和方法
相似$.trim(),$.proxy()這些方法就是工具方法,他的前面不是對象,而是$,$ 就是函數,在函數下面擴展方法就是擴展靜態方法,就是工具方法。工具方法便可給jquery使用,也能夠給原生的js使用 segmentfault
1.建立DOM元素:
能夠經過向$()函數傳遞一個包含HTML標記的字符串動態地建立DOM元素。例如,能夠建立一個新的段落元素。如:api
$("<p>Hi</p>")
2.經過索引獲取元素
由於jQuery容許咱們將包裝集當成javascript數組,因此咱們可使用簡單的數組下標來獲取包裝序列中的任何元素。好比,從頁面上帶有alt屬性的全部<img>
元素的包裝集中獲取第一個元素,可使用以下語句:
var img = $('img[alt]')[0];
$("form").submit(function(){ $(":submit",this).attr("disabled","disabled"); });
咱們經過:submit選擇器獲取表單中的全部提交按鈕,而且將其disabled屬性設置爲"disabled",this指針老是指向觸發此事件的頁面元素,在這裏,this指向表單實例(form)
4.添加多個類名
咱們能夠爲每一個元素指定任意數量的類名,在HTML中,class屬性用來提供以空格分隔,由多個類名組成的字符串。例如:
<div class = "one two three"></div>
jQuery的基本設計和主要用法,就是"選擇某個網頁元素,而後對其進行某種操做"。這是它區別於其餘函數庫的根本特色。
使用jQuery的第一步,每每就是將一個選擇表達式,放進構造函數jQuery()(簡寫爲$),而後獲得被選中的元素。
選擇表達式能夠是CSS選擇器:
1. $(document)//選擇整個文檔對象 2. 3. $('#myId')//選擇ID爲myId的網頁元素 4. 5. $('div.myClass')//選擇class爲myClass的div元素 6. 7. $('input[name=first]')//選擇name屬性等於first的input元素
也能夠是jQuery特有的表達式:
1. $('a:first')//選擇網頁中第一個a元素 2. 3. $('tr:odd')//選擇表格的奇數行 4. 5. $('#myForm :input')//選擇表單中的input元素 6. 7. $('div:visible') //選擇可見的div元素 8. 9. $('div:gt(2)')//選擇全部的div元素,除了前三個 10. 11. $('div:animated')//選擇當前處於動畫狀態的div元素
若是選中多個元素,jQuery提供過濾器,能夠縮小結果集:
$('div').has('p'); //選擇包含p元素的div元素 $('div').not('.myClass'); //選擇class不等於myClass的div元素 $('div').filter('.myClass'); //選擇class等於myClass的div元素 $('div').first(); //選擇第1個div元素 $('div').eq(5); //選擇第6個div元素
有時候,咱們須要從結果集出發,移動到附近的相關元素,jQuery也提供了在DOM
樹上的移動方法:
1. $('div').next('p'); //選擇div元素後面的第一個p元素 2. $('div').parent(); //選擇div元素的父元素 3. $('div').closest('form'); //選擇離div最近的那個form父元素 4. $('div').children(); //選擇div的全部子元素 5. $('div').siblings(); //選擇div的同級元素
選中網頁元素之後,就能夠對它進行某種操做。
jQuery容許將全部操做鏈接在一塊兒,以鏈條的形式寫出來,好比:
1. $('div').find('h3').eq(2).html('Hello');
分解開來,就是下面這樣:
1. $('div’) //找到div元素 2. .find('h3’) //選擇其中的h3元素 3. .eq(2) //選擇第3個h3元素 4. .html('Hello'); //將它的內容改成Hello
這是jQuery
最使人稱道、最方便的特色。它的原理在於每一步的jQuery操做,返回的都是一個jQuery
對象,因此不一樣操做能夠連在一塊兒。
那麼,如何判斷是否可使用jquery鏈式操做呢?
除了獲取某些數據的函數,好比獲取屬性值"attr(name)
",獲取集合大小"size()
",這些函數明顯是返回數據的。除了這些函數以外的jquery函數均可以用於鏈式操做,好比設置屬性attr(name.value)
jQuery
還提供了.end()
方法,使得結果集能夠後退一步:
1. $('div') 2. .find('h3') 3. .eq(2) 4. .html('Hello') 5. .end()//退回到選中全部的h3元素的那一步 6. .eq(0)//選中第一個h3元素 7. .html('World'); //將它的內容改成World
.end():
回到最近的一個"破壞性"操做以前。若是以前沒有破壞性操做,則返回一個空集。所謂的"破壞性"就是指任何改變所匹配的jQuery元素的操做。
示例
描述:選取全部的p元素,查找並選取span子元素,而後再回過來選取p元素
HTML 代碼:
<p><span>Hello</span>,how are you?</p>
jQuery 代碼:
$("p").find("span").end()
結果:
<p><span>Hello</span> how are you?</p>
<br/>
操做網頁元素,最多見的需求是取得它們的值,或者對它們進行賦值。
jQuery使用同一個函數,來完成取值(getter)和賦值(setter)。究竟是取值仍是賦值,由函數的參數決定。
1. $('h1').html(); //html()沒有參數,表示取出h1的值 2. $('h1').html('Hello'); //html()有參數Hello,表示對h1進行賦值
常見的取值和賦值函數以下:
1. .html() 返回或設置被選元素的內容 (inner HTML) 2. .text() 取出或設置text內容 3. .attr() 取出或設置某個屬性的值 4. .width() 取出或設置某個元素的寬度 5. .height() 取出或設置某個元素的高度 6. .val() 取出或設置html內容 取出某個表單元素的值
須要注意的是,若是結果集包含多個元素,那麼賦值的時候,將對其中全部的元素賦值;取值的時候,則是隻取出第一個元素的值(.text()
例外,它取出全部元素的text內容)。
.insertAfter()
,把div元素移動p元素後面:
$('div').insertAfter('p');
.after()
,把p元素加到div元素前面:
$('p').after('div');
使用這種模式的操做方法,一共有四對
1. .insertAfter()和.after():在現存元素的外部,從後面插入元素 2. .insertBefore()和.before():在現存元素的外部,從前面插入元素 3. .appendTo()和.append():在現存元素的內部,從後面插入元素 4. .prependTo()和.prepend() :在現存元素的內部,從前面插入元素
相關方法的詳細使用請查看個人另外一篇文章:jquery經常使用方法詳解
複製元素使用.clone()
刪除元素使用.remove()
和.detach()
。二者的區別在於,前者不保留被刪除元素的事件,後者保留,有利於從新插入文檔時使用。
清空元素內容(可是不刪除該元素)使用.empty()
。
建立新元素的方法很是簡單,只要把新元素直接傳入jQuery
的構造函數就好了:
* $('<p>Hello</p>'); * $('<li class="new">new list item</li>'); * $('ul').append('<li>list item</li>');
除了對選中的元素進行操做之外,jQuery還提供一些工具方法(utility),沒必要選中元素,就能夠直接使用。
工具方法便可給jquery使用,也能夠給原生的js使用
經常使用的工具方法有如下幾種:
1. $.trim() 去除字符串兩端的空格。 2. 3. $.each() 遍歷一個數組或對象。 4. 5. $.inArray() 返回一個值在數組中的索引位置。若是該值不在數組中,則返回-1。 6. 7. $.grep() 返回數組中符合某種標準的元素。 8. 9. $.extend() 將多個對象,合併到第一個對象。 10. 11. $.makeArray() 將對象轉化爲數組。 12. 13. $.type() 判斷對象的類別(函數對象、日期對象、數組對象、正則對象等等)。 14. 15. $.isArray() 判斷某個參數是否爲數組。 16. 17. $.isEmptyObject() 判斷某個對象是否爲空(不含有任何屬性)。 18. 19. $.isFunction() 判斷某個參數是否爲函數。 20. 21. $.isPlainObject() 判斷某個參數是否爲用"{}"或"new Object"創建的對象。 22. 23. $.support() 判斷瀏覽器是否支持某個特性。
jQuery能夠對網頁元素綁定事件。根據不一樣的事件,運行相應的函數。
1. $('p').click(function(){ 2. alert('Hello'); 3. });
目前,jQuery主要支持如下事件:
1. .blur() 表單元素失去焦點。 2. .change() 表單元素的值發生變化 3. .click() 鼠標單擊 4. .dblclick() 鼠標雙擊 5. .focus() 表單元素得到焦點 6. .focusin() 子元素得到焦點 7. .focusout() 子元素失去焦點 8. .hover() 同時爲mouseenter和mouseleave事件指定處理函數 9. .keydown() 按下鍵盤(長時間按鍵,只返回一個事件) 10. .keypress() 按下鍵盤(長時間按鍵,將返回多個事件) 11. .keyup() 鬆開鍵盤 12. .load() 元素加載完畢 13. .mousedown() 按下鼠標 14. .mouseenter() 鼠標進入(進入子元素不觸發) 15. .mouseleave() 鼠標離開(離開子元素不觸發) 16. .mousemove() 鼠標在元素內部移動 17. .mouseout() 鼠標離開(離開子元素也觸發) 18. .mouseover() 鼠標進入(進入子元素也觸發) 19. .mouseup() 鬆開鼠標 20. .ready() DOM加載完成 21. .resize() 瀏覽器窗口的大小發生改變 22. .scroll() 滾動條的位置發生變化 23. .select() 用戶選中文本框中的內容 24. .submit() 用戶遞交表單 25. .toggle() 根據鼠標點擊的次數,依次運行多個函數 26. .unload() 27. 用戶離開頁面
以上這些事件在jQuery內部,都是.bind()的便捷方式。使用.bind()能夠更靈活地控制事件,好比爲多個事件綁定同一個函數:
1. $('input').bind( 2. 'click change', //同時綁定click和change事件 3. function(){ 4. alert('Hello'); 5. } 6. );
有時,你只想讓事件運行一次,這時可使用.one()方法。
1. $("p").one("click", function(){ 2. alert("Hello"); //只運行一次,之後的點擊不會運行 3. });
.unbind()
用來解除事件綁定。
1. $('p').unbind('click');
全部的事件處理函數,均可以接受一個事件對象(event object)做爲參數,好比下面例子中的e:
1. $("p").click(function(e){ 2. alert(e.type); //"click" 3. });
這個事件對象有一些頗有用的屬性和方法:
event.pageX
事件發生時,鼠標距離網頁左上角的水平距離event.pageY
事件發生時,鼠標距離網頁左上角的垂直距離event.type
事件的類型(好比click)
event.which
按下了哪個鍵 event.data
在事件對象上綁定數據,而後傳入事件處理函數 event.target
事件針對的網頁元素
event.preventDefault()
阻止事件的默認行爲(好比點擊連接,會自動打開新頁面)event.stopPropagation()
中止事件向上層元素冒泡
在事件處理函數中,能夠用this
關鍵字,返回事件針對的DOM
元素:
* $('a').click(function(){ * if ($(this).attr('href').match('evil')){//若是確認爲有害連接 * e.preventDefault(); //阻止打開 * $(this).addClass('evil'); //加上表示有害的class * } * });
有兩種方法,能夠自動觸發一個事件。一種是直接使用事件函數,另外一種是使用.trigger()或.triggerHandler()。
$('a').click(); $('a').trigger('click');
<br/>
jQuery容許對象呈現某些特殊效果。
$('h1').show(); //展示一個h1標題
經常使用的特殊效果以下:
.fadeIn() 淡入 .fadeOut() 淡出 .fadeTo() 調整透明度 .hide() 隱藏元素 .show() 顯示元素 .slideDown() 向下展開 .slideUp() 向上捲起 .slideToggle() 依次展開或捲起某個元素 .toggle() 依次展現或隱藏某個元素
除了.show()和.hide(),全部其餘特效的默認執行時間都是400ms(毫秒),可是你能夠改變這個設置。
* $('h1').fadeIn(300); // 300毫秒內淡入 * $('h1').fadeOut('slow'); //緩慢地淡出
在特效結束後,能夠指定執行某個函數。
1. $('p').fadeOut(300, function(){$(this).remove(); });
更復雜的特效,能夠用.animate()
自定義。
1. $('div').animate( 2. { 3. left : "+=50",//不斷右移 4. opacity : 0.25 //指定透明度 5. }, 6. 300,// 持續時間 7. function(){ alert('done!'); }//回調函數 8. );
.stop()
和.delay()
用來中止或延緩特效的執行。
$.fx.off
若是設置爲true
,則關閉全部網頁特效。
filter():
篩選出與指定表達式匹配的元素集合。這個方法用於縮小匹配的範圍。用逗號分隔多個表達式
描述:保留子元素中不含有ol的元素。
HTML 代碼:
<p><ol><li>Hello</li></ol></p><p>How are you?</p>
jQuery 代碼:
$("p").filter(function(index) { return $("ol", this).length == 0; });
結果:
<p>How are you?</p>
silce():
選取一個匹配的子集
描述:選擇第一個p元素
HTML 代碼:
<p>Hello</p><p>cruel</p><p>World</p>
jQuery 代碼:
$("p").slice(0, 1).wrapInner("<b></b>");
結果:
<p><b>Hello</b></p>
另附:jquery經常使用方法詳解
<br/>
如何使用JQuery CDN?推薦使用官方的CDN
節點,使用代碼以下:
1. <script src="//code.jquery.com/jquery-1.11.0.min.js"> </script> 2. <script src="//code.jquery.com/jquery-migrate-1.2.1.min.js"> </script>
jquery與原生的關係:
<script type="text/javascript"> $(function(){ $('#div1').click(function(){ //alert( $(this).html()); //jq的寫法 //alert( this .innerHTML ); //js alert( $(this).innerHTML ); //錯誤的寫法,jq與原生不能混用 alert ( this.html()); //也是錯誤的 }) }) </script> </head> <body> <div id="div1">abcd</div> </body>
jquery中文文檔:http://www.css88.com/jqapi-1.9/
本文主要來自jquery設計思想