精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

從零開始學(xué)習(xí)jQuery之必知的工具函數(shù)

開發(fā) 前端
大部分人僅僅使用jQuery的選擇器選擇對象, 或者實(shí)現(xiàn)頁面動畫效果. 在處理業(yè)務(wù)邏輯時(shí)常常自己編寫很多算法. 本文提醒各位jQuery也能提高我們操作對象和數(shù)組的效率. 并且可以將一些常用算法擴(kuò)充到j(luò)Query工具函數(shù)中, 實(shí)現(xiàn)腳本函數(shù)的復(fù)用

本系列文章將帶您進(jìn)入jQuery的精彩世界, 其中有很多作者具體的使用經(jīng)驗(yàn)和解決方案, 即使你會使用jQuery也能在閱讀中發(fā)現(xiàn)些許秘籍.我們經(jīng)常要使用腳本處理各種業(yè)務(wù)邏輯, 最常見的就是數(shù)組和對象的操作. jQuery工具函數(shù)為我們操作對象和數(shù)組提供了便利條件。大部分人僅僅使用jQuery的選擇器選擇對象, 或者實(shí)現(xiàn)頁面動畫效果. 在處理業(yè)務(wù)邏輯時(shí)常常自己編寫很多算法. 本文提醒各位jQuery也能提高我們操作對象和數(shù)組的效率. 并且可以將一些常用算法擴(kuò)充到j(luò)Query工具函數(shù)中, 實(shí)現(xiàn)腳本函數(shù)的復(fù)用.

51CTO推薦專題:jQuery從入門到精通

一.什么是工具函數(shù)

工具函數(shù)是指在jQuery對象(即變量"$")上定義的函數(shù). 這些函數(shù)都是工具類函數(shù).比如C#中最常用的trim()函數(shù):

  1. $.trim("  text   "); 

在原始javascript中并沒有提供同時(shí)去除前后空格的trim函數(shù). 所以這一類常用的工具函數(shù)統(tǒng)稱為 "Utilities" 函數(shù).對應(yīng)jQuery官方文檔:

http://docs.jquery.com/Utilities

"$"其實(shí)是"window"對象的屬性, 所以下面幾句話是等價(jià)的:

二. 工具函數(shù)分類

工具函數(shù)主要分為下面幾類:

◆ 瀏覽器及特性檢測

◆ 數(shù)組和對象操作

◆ 測試操作

◆ 字符串操作

◆ Url操作

區(qū)別于前幾章的講解方式, 本文不在列舉函數(shù)列表. 大家在應(yīng)用中, 比如遇到想操作一個(gè)字符串, 可以首先從在"API文檔/Utilities/字符串操作"中查找是否已經(jīng)提供了快捷的工具函數(shù). 如果沒有再考慮自己開發(fā).

下面使用實(shí)例具體的每個(gè)分類下常用的工具函數(shù).

三.瀏覽器及特性檢測

jQuery的優(yōu)秀就在于其跨瀏覽器的特性, 通常我們不用再針對不同瀏覽器書寫不同的代碼. 但是如果是jQuery開發(fā)人員或者插件開發(fā)人員就要自行處理瀏覽器差異, 以便為用戶提供跨瀏覽器的特性.

jQuery提供了下列屬性用于獲取瀏覽器特性:

jQuery.support 1.3版本新增
jQuery.browser 已廢除
jQuery.browser 已廢除
jQuery.browser 已廢除

在1.3版本中已經(jīng)廢除了三個(gè)屬性, 這里不再講解. 讓我們將注意力放在 jQuery.support 函數(shù)上.

jQuery.support

返回值: Object

說明:

jQuery 1.3 新增。一組用于展示不同瀏覽器各自特性和bug的屬性集合。

jQuery提供了一系列屬性,你也可以自由增加你自己的屬性。其中許多屬性是很低級的,所以很難說他們能否在日新月異的發(fā)展中一直保持有效,但這這些主要用于插件和內(nèi)核開發(fā)者。

所有這些支持的屬性值都通過特性檢測來實(shí)現(xiàn),而不是用任何瀏覽器檢測。以下有一些非常棒的資源用于解釋這些特性檢測是如何工作的:

http://peter.michaux.ca/articles/feature-detection-state-of-the-art-browser-scripting

http://yura.thinkweb2.com/cft/

http://www.jibbering.com/faq/faq_notes/not_browser_detect.html

jQuery.support主要包括以下測試:

boxModel: 如果這個(gè)頁面和瀏覽器是以W3C CSS盒式模型來渲染的,則等于true。通常在IE 6和IE 7的怪癖模式中這個(gè)值是false。在document準(zhǔn)備就緒前,這個(gè)值是null。

cssFloat: 如果用cssFloat來訪問CSS的float的值,則返回true。目前在IE中會返回false,他用styleFloat代替。

hrefNormalized: 如果瀏覽器從getAttribute("href")返回的是原封不動的結(jié)果,則返回true。在IE中會返回false,因?yàn)樗腢RLs已經(jīng)常規(guī)化了。

htmlSerialize: 如果瀏覽器通過innerHTML插入鏈接元素的時(shí)候會序列化這些鏈接,則返回true,目前IE中返回false。

leadingWhitespace: 如果在使用innerHTML的時(shí)候?yàn)g覽器會保持前導(dǎo)空白字符,則返回true,目前在IE 6-8中返回false。

noCloneEvent: 如果瀏覽器在克隆元素的時(shí)候不會連同事件處理函數(shù)一起復(fù)制,則返回true,目前在IE中返回false。

objectAll: 如果在某個(gè)元素對象上執(zhí)行g(shù)etElementsByTagName("*")會返回所有子孫元素,則為true,目前在IE 7中為false。

opacity: 如果瀏覽器能適當(dāng)解釋透明度樣式屬性,則返回true,目前在IE中返回false,因?yàn)樗胊lpha濾鏡代替。

scriptEval: 使用 appendChild/createTextNode 方法插入腳本代碼時(shí),瀏覽器是否執(zhí)行腳本,目前在IE中返回false,IE使用 .text 方法插入腳本代碼以執(zhí)行。

style: 如果getAttribute("style")返回元素的行內(nèi)樣式,則為true。目前IE中為false,因?yàn)樗胏ssText代替。

tbody: 如果瀏覽器允許table元素不包含tbody元素,則返回true。目前在IE中會返回false,他會自動插入缺失的tbody。

講解:

針對上面眾多的瀏覽器特性屬性, 本文只講解兩個(gè)特性.

1.盒式模型 boxModel

下圖是W3C標(biāo)準(zhǔn)中的盒式模型圖:

 

image

 

假設(shè)如下元素:

  1. <style type="text/css">  
  2. .boxModel  
  3. {  
  4.     width:200px;  
  5.     height:50px;  
  6.     padding:10px;  
  7.     border:solid 5px #FF0000;  
  8.     background-color:#acacac;  
  9. }  
  10. </style>  
  11. <div id="divBox" class="boxModel"

顯示效果如圖:

 

[[32231]]

 

在CSS中設(shè)定元素寬度為200px, 下面以此元素為例講解盒式模式.

W3C 盒式模型:

元素的寬度和高度為盒式模型圖中的Context部分, 不包括padding, border和margin部分.

目前除了IE所有的瀏覽器都僅支持W3C盒式模型. 在W3C盒式模型中, 示例中包含紅框在內(nèi)的區(qū)域內(nèi)容寬度為200+2*10+2*5=230px, 高度為50+2*10+2*5=80px.

IE 盒式模型:

設(shè)置的寬度包括padding,border. 實(shí)際內(nèi)容寬度content Width = width - padding – border

在IE5.5及更早的版本中, 使用了此模型. 在更高的IE版本上如果由于某些原因讓瀏覽器運(yùn)行在怪異模式下則也會使用此盒式模式.所以需要在頁面上聲明正確的DOCTYPE. 有關(guān)DOCTYPE請參考此文:

http://www.cnblogs.com/zhangziqiu/archive/2009/01/15/doctype.html

下面是兩種盒式模式的對比:

 

image

 

我們可以使用 jQuery.support.boxModel 屬性來獲取瀏覽器是否使用了W3C盒式模型. true表示使用W3C boxModel.

2.浮動樣式

通過javascript腳本設(shè)置元素的float樣式時(shí), IE和FireFox存在不同, IE使用style.styleFloat, FireFox使用style.cssFloat:

  1. div.style.styleFloat = "left"//IE  
  2. div.stlye.cssFloat = "left"//FF 

jQuery.support.cssFloat 屬性返回true則表示可以使用cssFloat來設(shè)置float樣式. IE中返回false;

注意, 我們可以通過CSS()方法設(shè)置float樣式, jQuery內(nèi)部會自動幫我們判斷是使用styleFloat還是cssFloat:

  1. $("#divResult").css("float","left"); //兼容IE和FF 

#p#

四. 數(shù)組和對象操作

實(shí)現(xiàn)UI我們常常操作DOM對象或者jQuery包裝集, 但是實(shí)現(xiàn)算法或者業(yè)務(wù)邏輯時(shí)往往操作的是數(shù)組和對象.

下面講解最常用的數(shù)組和對象相關(guān)的工具函數(shù).

1.迭代

jQuery.each( object, callback )

返回值:Object

說明:

通用例遍方法,可用于例遍對象和數(shù)組。

不同于例遍 jQuery 對象的 $().each() 方法,此方法可用于例遍任何對象。回調(diào)函數(shù)擁有兩個(gè)參數(shù):***個(gè)為對象的成員或數(shù)組的索引,第二個(gè)為對應(yīng)變量或內(nèi)容。如果需要退出 each 循環(huán)可使回調(diào)函數(shù)返回 false,其它返回值將被忽略。

講解:

對于jQuery包裝集我們可以使用each(callback)方法迭代包裝集中的每一個(gè)元素. callback是一個(gè)會函數(shù), 接受一個(gè)參數(shù)表示當(dāng)前訪問對象的索引.

  1. $("img").each(function(i){  
  2.    this.src = "test" + i + ".jpg";  
  3.  }); 

對于數(shù)組我們可以使用 jQuery.each( object, callback ) 來遍歷, 這等同于使用for循環(huán).

注意傳入的***個(gè)參數(shù)可以是數(shù)組或者對象.如果數(shù)組,則遍歷數(shù)組中的每一個(gè)對象. ***個(gè)參數(shù)表示索引,第二個(gè)參數(shù)表示值, this表示當(dāng)前遍歷的元素, 可以通過返回false終止迭代, 比如下面的示例遍歷到第二個(gè)元素后會終止:

  1. $.each(["a""b""c"], function(i, n)  
  2. {  
  3.     alert("Item #" + i + ": " + n);//可以獲取到i值  
  4.     if (i >= 1)  
  5.     {  
  6.         return false;  
  7.     }  
  8. });  
  9.  
  10.  
  11. $("#iterateArray").click(function(event)  
  12. {  
  13. var array = $.each(["a""b""c"], function(i, n)  
  14. {  
  15.     alert("Item #" + i + ": " + n ); //***個(gè)參數(shù)i表示索引, this表示當(dāng)前遍歷的對象  
  16.     if (i >= 1)  
  17.     {  
  18.         return false;  
  19.     }  
  20. });  
  21. });  
  22.  

如果傳遞的是對象, 則遍歷對象的每一個(gè)屬性, 即使函數(shù)返回false也依然會遍歷完所有的屬性, ***個(gè)參數(shù)表示屬性key(屬性名稱,是obejct類型),第二個(gè)參數(shù)表示值,,this表示當(dāng)前屬性的值:

  1. $("#iterateObject").click(function(event)  
  2. {  
  3.     $.each({ name: "ziqiu.zhang", sex: "male", status: "single" }, function(i, n)  
  4.     {  
  5.         alert("Item #" + i.toString() + ": " + n ); //***個(gè)參數(shù)i表示屬性的key(object), this表示屬性值  
  6.         if (i >= 1)  
  7.         {  
  8.             return false;  
  9.         }  
  10.     });  
  11. }); 

each將是我們最常使用的函數(shù), 特別注意each雖然迭代每一個(gè)元素或?qū)傩? 但是在迭代函數(shù)中并不會改變當(dāng)前元素的值, 也就是無法改變返回后的對象.如果需要改變數(shù)組中的每一個(gè)元素并且將結(jié)果返回, 因使用jQuery.map( array, callback )函數(shù).

2.篩選

jQuery.grep( array, callback, [invert] )

返回值: Array

說明:

使用過濾函數(shù)過濾數(shù)組元素。

此函數(shù)至少傳遞兩個(gè)參數(shù):待過濾數(shù)組和過濾函數(shù)。過濾函數(shù)必須返回 true 以保留元素或 false 以刪除元素。

講解:

默認(rèn)invert為false, 即過濾函數(shù)返回true為保留元素. 如果設(shè)置invert為true, 則過濾函數(shù)返回true為刪除元素.

下面的示例演示如何過濾數(shù)組中索引小于 0 的元素:

  1. $.grep( [0,1,2], function(n,i){  
  2.   return n > 0;  
  3. }); 

返回的結(jié)果是[1,2]

3.轉(zhuǎn)換

jQuery.map( array, callback )

返回值:Array

說明:

將一個(gè)數(shù)組中的元素轉(zhuǎn)換到另一個(gè)數(shù)組中。

作為參數(shù)的轉(zhuǎn)換函數(shù)會為每個(gè)數(shù)組元素調(diào)用,而且會給這個(gè)轉(zhuǎn)換函數(shù)傳遞一個(gè)表示被轉(zhuǎn)換的元素作為參數(shù)。轉(zhuǎn)換函數(shù)可以返回轉(zhuǎn)換后的值、null(刪除數(shù)組中的項(xiàng)目)或一個(gè)包含值的數(shù)組,并擴(kuò)展至原始數(shù)組中。

講解:

1.3.2版本中此函數(shù)和each函數(shù)已經(jīng)幾乎相同(以前稍有不同), 現(xiàn)在唯一的區(qū)別就是回調(diào)函數(shù)可以改變當(dāng)前元素.返回null則刪除當(dāng)前元素.

下面是幾個(gè)例子:

  1. var arr = [ "a""b""c""d""e" ]  
  2. $("div").text(arr.join(", "));  
  3.  
  4. arr = jQuery.map(arr, function(n, i){  
  5.   return (n.toUpperCase() + i);  
  6. });  
  7. $("p").text(arr.join(", "));  
  8.  
  9. arr = jQuery.map(arr, function (a) { return a + a; });  
  10. $("span").text(arr.join(", ")); 

4.合并

合并對象是我們常常編寫的功能, 通常使用臃腫的for循環(huán)來進(jìn)行.jQuery為我們提供了很多功能的合并函數(shù):

名稱 說明 舉例
jQuery.extend( [deep], target, object1, [objectN] ) 用一個(gè)或多個(gè)其他對象來擴(kuò)展一個(gè)對象,返回被擴(kuò)展的對象。

如果不指定target,則給jQuery命名空間本身進(jìn)行擴(kuò)展。這有助于插件作者為jQuery增加新方法。

如果***個(gè)參數(shù)設(shè)置為true,則jQuery返回一個(gè)深層次的副本,遞歸地復(fù)制找到的任何對象。否則的話,副本會與原對象共享結(jié)構(gòu)。

為定義的屬性將不會被復(fù)制,然而從對象的原型繼承的屬性將會被復(fù)制。

合并 settings 和 options,修改并返回 settings:
var settings = { validate: false, limit: 5, name: "foo" };
var options = { validate: true, name: "bar" };
jQuery.extend(settings, options);

結(jié)果:
settings == { validate: true, limit: 5, name: "bar" }

jQuery.makeArray( obj ) 將類數(shù)組對象轉(zhuǎn)換為數(shù)組對象。

類數(shù)組對象有 length 屬性,其成員索引為 0 至 length - 1。實(shí)際中此函數(shù)在 jQuery 中將自動使用而無需特意轉(zhuǎn)換。

將DOM對象集合轉(zhuǎn)換為數(shù)組:
var arr = jQuery.makeArray(document.getElementsByTagName("div"));
jQuery.inArray( value, array ) 確定***個(gè)參數(shù)在數(shù)組中的位置,從0開始計(jì)數(shù)(如果沒有找到則返回 -1 )。 查看對應(yīng)元素的位置:
var arr = [ 4, "Pete", 8, "John" ];
jQuery.inArray("John", arr); //3
jQuery.inArray(4, arr); //0
jQuery.inArray("David", arr); //-
jQuery.merge( first, second ) 合并兩個(gè)數(shù)組

返回的結(jié)果會修改***個(gè)數(shù)組的內(nèi)容——***個(gè)數(shù)組的元素后面跟著第二個(gè)數(shù)組的元素。要去除重復(fù)項(xiàng),請使用$.unique()

合并兩個(gè)數(shù)組到***個(gè)數(shù)組上:
$.merge( [0,1,2], [2,3,4] )

結(jié)果:
[0,1,2,2,3,4]

jQuery.unique( array ) 刪除數(shù)組中重復(fù)元素。只處理刪除DOM元素?cái)?shù)組,而不能處理字符串或者數(shù)字?jǐn)?shù)組。 刪除重復(fù) div 標(biāo)簽:
$.unique(document.getElementsByTagName("div"));

[<div>, <div>, ...]

講解:

上面的函數(shù)看著有些混亂. 看看我們以后會常用的.

首先是jQuery.merge( first, second ), 將兩個(gè)數(shù)組合并. 下面這個(gè)示例說明如何使用此函數(shù):

  1. <html xmlns="http://www.w3.org/1999/xhtml">  
  2. <head>  
  3.     <title>jQuery Utilities - jQuery.merge</title>  
  4.  
  5.     <script src="../scripts/jquery-1.3.2-vsdoc2.js" type="text/javascript"></script>  
  6.  
  7.     <script type="text/javascript">  
  8.         $(function()  
  9.         {  
  10.             $("#go").click(function(event)  
  11.             {  
  12.                 $("#divResult").html("");  
  13.                 var first = [1, 3, 5];  
  14.                 $("#divResult").append("<span>first:[" + first.join(",") + "]</span>").append("<br/>");  
  15.                 var second = [2, 4, 6];  
  16.                 $("#divResult").append("<span>second:[" + second.join(",") + "]</span>").append("<br/>");  
  17.                 var result = $.merge(first, second);  
  18.                 $("#divResult").append("<span>result:[" + result.join(",") + "]</span>").append("<br/>");  
  19.                 $("#divResult").append("<span>first after merged:[" + first.join(",") + "]</span><br/>");  
  20.                 $("#divResult").append("<span>second after merged:[" + second.join(",") + "]</span><br/>");  
  21.  
  22.             });  
  23.         });         
  24.              
  25.     </script>  
  26.  
  27. </head>  
  28. <body>  
  29.     <button id="go">  
  30.         合并數(shù)組</button>  
  31.     <br />  
  32.     <div id="divResult">  
  33.     </div>  
  34. </body>  
  35. </html> 

結(jié)果如圖:

 

image

 

另外不能因?yàn)橛辛薺Query就忘記我們的原始javascript. 比merge更常用的其實(shí)是join和split函數(shù).

merge函數(shù)會改變***個(gè)合并的數(shù)組, 如果是我設(shè)計(jì)我就不會這么做. 因?yàn)榉祷刂狄呀?jīng)是合并后的數(shù)組了.如此設(shè)計(jì)讓函數(shù)產(chǎn)生歧義.

列表中的那么多函數(shù)不再一一講解. 先用先查. 除了 jQuery.extend 這個(gè)不得不提的函數(shù). 下面單提一個(gè)小結(jié)講解.

5. jQuery.extend

在開發(fā)插件的時(shí)候最常用此函數(shù)函數(shù)來處理options.

下面是fancybox插件獲取options的代碼:

  1. settings = $.extend({}, $.fn.fancybox.defaults, settings); 

上面的代碼target是一個(gè)空對象, 將默認(rèn)設(shè)置defaults作為***個(gè)對象, 將用戶傳入的設(shè)置setting合并到default上, setting上有的屬性以setting為準(zhǔn). setting沒有傳入的屬性則使用default的默認(rèn)值. 然后將合并的結(jié)果復(fù)制給target并作為函數(shù)返回值返回.

看一個(gè)完整的示例:

  1. var empty = {}  
  2. var defaults = { validate: false, limit: 5, name: "foo" };  
  3. var options = { validate: true, name: "bar" };  
  4. var settings = jQuery.extend(empty, defaults, options); 

結(jié)果:

settings == { validate: true, limit: 5, name: "bar" }

empty == { validate: true, limit: 5, name: "bar" }

target參數(shù)要傳遞一個(gè)空對象是因?yàn)閠arget的值***將被改變.比如:

  1. var defaults = { validate: false, limit: 5, name: "foo" };  
  2. var options = { validate: true, name: "bar" };  
  3. var settings = jQuery.extend(defaults, options);  

上面的代碼將defaults作為target參數(shù), 雖然***settings的結(jié)果一樣, 但是defaults的值被改變了! 而插件中的默認(rèn)值應(yīng)該都是固定! 所以使用時(shí)請注意target參數(shù)的用法.

下面是我的完整示例和結(jié)果:

  1. <html xmlns="http://www.w3.org/1999/xhtml">  
  2. <head>  
  3.     <title>jQuery Utilities - jQuery.extend</title>  
  4.  
  5.     <script src="../scripts/jquery-1.3.2-vsdoc2.js" type="text/javascript"></script>  
  6.  
  7.     <script type="text/javascript">  
  8.         $.toObjectString = function (obj)  
  9.         {  
  10.             var result = "{";  
  11.             var counter = 0;  
  12.             $.each(obj, function(i, n)  
  13.             {  
  14.                 if (counter > 0) { result += ","; }  
  15.                 result += i.toString() + ":" + n.toString();  
  16.                 counter++;   
  17.             });  
  18.             result += "}";  
  19.             return result;  
  20.         }  
  21.  
  22.         $(function()  
  23.         {  
  24.             $("#go1").click(function(event)  
  25.             {  
  26.                 $("#divResult").html("");  
  27.  
  28.                 var empty = {}  
  29.                 var defaults = { validate: false, limit: 5, name: "foo" };  
  30.                 var options = { validate: true, name: "bar" };  
  31.  
  32.                 $("#divResult").append("<span>empty:" + $.toObjectString(empty) + "</span>").append("<br/>");  
  33.                 $("#divResult").append("<span>defaults:" + $.toObjectString(defaults) + "</span>").append("<br/>");  
  34.                 $("#divResult").append("<span>options:" + $.toObjectString(options) + "</span>").append("<br/>");                  
  35.                   
  36.                 var settings = jQuery.extend(empty, defaults, options);  
  37.                 $("#divResult").append("<span>settings after extend:" + $.toObjectString(settings) + "</span>").append("<br/>");  
  38.                 $("#divResult").append("<span>defaults after extend:" + $.toObjectString(defaults) + "</span>").append("<br/>");  
  39.                 $("#divResult").append("<span>options after extend:" + $.toObjectString(options) + "</span>").append("<br/>");  
  40.  
  41.             });  
  42.  
  43.             $("#go2").click(function(event)  
  44.             {  
  45.                 $("#divResult").html("");  
  46.  
  47.    
  48.                 var defaults = { validate: false, limit: 5, name: "foo" };  
  49.                 var options = { validate: true, name: "bar" };  
  50.                 $("#divResult").append("<span>defaults:" + $.toObjectString(defaults) + "</span>").append("<br/>");  
  51.                 $("#divResult").append("<span>options:" + $.toObjectString(options) + "</span>").append("<br/>");  
  52.                   
  53.                 var settings = jQuery.extend(defaults, options);  
  54.                 $("#divResult").append("<span>settings after extend:" + $.toObjectString(settings) + "</span>").append("<br/>");  
  55.                 $("#divResult").append("<span>defaults after extend:" + $.toObjectString(defaults) + "</span>").append("<br/>");  
  56.                 $("#divResult").append("<span>options after extend:" + $.toObjectString(options) + "</span>").append("<br/>");  
  57.  
  58.             });  
  59.         });         
  60.              
  61.     </script>  
  62.  
  63. </head>  
  64. <body>  
  65.     <button id="go1" style="height:40px;width:400px;">  
  66.         jQuery.extend(empty, defaults, options)</button>  
  67.     <button id="go2"  style="height:40px;width:400px;">  
  68.         jQuery.extend(defaults, options)</button>  
  69.     <br />  
  70.     <div id="divResult">  
  71.     </div>  
  72. </body>  
  73. </html> 

結(jié)果:

 

image

 

 

image

 

#p#

五. 測試工具函數(shù)

測試工具函數(shù)主要用于判斷對象是否是某一種類型, 返回的都是Boolean值:

jQuery.isArray( obj )

jQuery.isFunction( obj )

同時(shí)別忘記了javascript中自帶的isNaN和isFinite:

  1. var test = "123";    
  2. alert(isNaN(test));    
  3. alert(isFinite(test));  

isNaN函數(shù)判斷參數(shù)是否是非數(shù)字. 如果是數(shù)字則返回false.isFinite函數(shù)檢查其參數(shù)是否是無窮大.如果參數(shù)是 NaN(非數(shù)字),或者是正、負(fù)無窮大的數(shù),則返回 false.否則返回true.

六. 字符處操作工具函數(shù)

目前核心類庫中只有一個(gè)字符串工具函數(shù):

jQuery.trim( str )

返回值: string

說明:去掉字符串起始和結(jié)尾的空格。

舉例:

去掉字符串起始和結(jié)尾的空格:

  1. $.trim("  hello, how are you?  "); 

結(jié)果:

"hello, how are you?"

七. Url操作工具函數(shù)

jQuery.param( obj )

返回值:string

說明:

將表單元素?cái)?shù)組或者對象序列化。是.serialize()的核心方法。

數(shù)組或jQuery對象會按照name/value對進(jìn)行序列化,普通對象按照key/value對進(jìn)行序列化

舉例:

  1. var params = { width:1680, height:1050 };    
  2. var str = jQuery.param(params);    
  3. $("#results").text(str);   

結(jié)果:

width=1680&height=1050

jQuery將其歸為Urls分類, 因?yàn)榇朔椒ㄍǔS糜诎l(fā)送GET請求時(shí)將對象作為urls參數(shù)傳遞給服務(wù)端.

八. 擴(kuò)展工具函數(shù)與jQuery包裝集函數(shù)

擴(kuò)展工具函數(shù)只需要對jQuery(即"$")進(jìn)行擴(kuò)展. 通常開發(fā)工具函數(shù)或者插件的人希望在開發(fā)時(shí)使用"$", 但因?yàn)?quot;$"有可能和其他腳本庫沖突, 所以通常我們使用下面的語法開發(fā)工具函數(shù):

  1. (function($)  
  2. {  
  3.     $.myExtendMethod = function(o)  
  4.     {  
  5.         alert(0);  
  6.     };              
  7. })(jQuery); 

在函數(shù)體內(nèi)的"$"能保證是代表jQuery對象.

然后使用這種方式開發(fā)不能享受到智能感知的便利. 一般我們將擴(kuò)展工具函數(shù)和擴(kuò)展jQuery包裝集函數(shù)都放在一個(gè)單獨(dú)的文件中.

下面這個(gè)示例演示如何添加自定義的jQuery工具方法和jQuery包裝集方法:

通過***行reference, 我們可以在此js文件中繼續(xù)使用jQuery腳本智能感知. jQuery.myExtendMethod方法擴(kuò)展的工具函數(shù).jQuery.fn.myExtendMethod方法擴(kuò)展的是jQuery包裝集函數(shù), 即為使用$()獲取到的對象添加了方法.同理使用XML注釋, 比如

還可以為自定義方法添加智能感知提示.腳本中的XML注釋和.NET中的一樣, 有關(guān).NET中的XML注釋可以參考我的另外一篇文章:使用.NET中的XML注釋(一) -- XML注釋標(biāo)簽講解

九.總結(jié)

jQuery提供了許多的工具函數(shù), 在一般情況下可以滿足我們的需要. 但是對于像JSON格式化一類的操作, 需要我們自己擴(kuò)展, 現(xiàn)有的各種擴(kuò)展組件資源將提高我們的開發(fā)效率, 本系列Ajax章節(jié)就介紹的一個(gè)JSON序列化的組件jQuery.json. 更多的組件需要大家在工作中挖掘.

【編輯推薦】

  1. 從零開始學(xué)習(xí)jQuery之jQuery實(shí)施方案
  2. 從零開始學(xué)習(xí)jQuery之讓頁面動起來
  3. 從零開始學(xué)習(xí)jQuery之Ajax快餐
  4. 從零開始學(xué)習(xí)jQuery之管理jQuery包裝集
  5. jQuery從入門到精通
責(zé)任編輯:陳貽新 來源: 旺仔的專欄
相關(guān)推薦

2011-05-24 13:37:16

jQueryAjax

2011-06-07 14:15:01

jQuery

2011-05-05 11:03:34

jQueryjavascript

2011-04-19 13:32:01

jQueryjavascript

2011-06-01 14:51:54

jQuery

2011-04-26 15:07:48

jQuery

2023-11-14 16:14:49

2018-08-20 08:15:50

編程語言Go語言切片

2011-04-06 15:55:50

開發(fā)webOS程序webOS

2022-02-16 22:57:57

Mitmproxy抓包工具

2018-04-16 16:31:56

前端開發(fā)從零開始

2023-03-21 07:35:43

2011-09-05 14:17:54

Sencha ToucMVC

2014-07-22 13:09:21

android

2015-09-18 10:09:05

Swift

2015-11-17 16:11:07

Code Review

2019-01-18 12:39:45

云計(jì)算PaaS公有云

2018-04-18 07:01:59

Docker容器虛擬機(jī)

2024-12-06 17:02:26

2020-07-02 15:32:23

Kubernetes容器架構(gòu)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

亚洲欧美自拍偷拍色图| 日本aⅴ精品一区二区三区 | 日韩国产一级片| 午夜性色福利影院| 久久精品免费观看| 欧美精品九九久久| 成人h动漫精品一区| 国产精品天堂蜜av在线播放| 一区二区三区视频在线看| 蜜桃传媒视频麻豆第一区免费观看 | 午夜精品毛片| 日韩精品在线视频观看| 中国黄色片一级| 川上优av中文字幕一区二区| 国产精品免费视频一区| 精品欧美国产| 国产精品老熟女视频一区二区| 亚洲高清不卡| 精品国偷自产在线视频99| 亚洲制服丝袜在线播放| av在线成人| 日本黄色一区二区| 无码熟妇人妻av在线电影| 国产色a在线| 91在线免费播放| 亚洲精品免费网站| 波多野结衣小视频| 中日韩视频在线观看| 久久人人爽人人爽爽久久| 日本xxxxxxxxx18| 粉嫩一区二区三区四区公司1| 欧美视频自拍偷拍| 国产亚洲天堂网| 亚洲精品白浆| 最新国产成人在线观看| 日韩精品电影网站| 色视频在线观看福利| 国产成人午夜视频| 91色中文字幕| 一个人看的www日本高清视频| 久久www成人_看片免费不卡| 久久青草福利网站| 九九热精彩视频| 欧美顶级大胆免费视频| 中文字幕亚洲欧美| av中文字幕免费观看| 噜噜噜天天躁狠狠躁夜夜精品| 337p亚洲精品色噜噜狠狠| 成年网站在线播放| 欧美不卡高清一区二区三区| 欧美日韩中文字幕在线| 日本三级免费网站| 精品众筹模特私拍视频| 亚洲自拍另类综合| 免费人成自慰网站| 国产高清在线a视频大全| 亚洲乱码中文字幕| 免费看日b视频| 青青草原国产在线| 亚洲国产成人porn| 欧美 日韩 亚洲 一区| 免费在线观看的电影网站| 一区二区三区四区不卡在线 | 37p粉嫩大胆色噜噜噜| 色爱av综合网| 亚洲人成在线电影| 69xxx免费| 91成人影院| 欧美伦理91i| 久久亚洲国产成人精品性色| 一区二区自拍| 奇米成人av国产一区二区三区| 欧美啪啪小视频| 老司机免费视频久久| 国产精品jizz在线观看麻豆| 中文字幕一区二区三区波野结| 久久99热99| 99在线热播| 深夜福利视频在线观看| 亚洲国产精品99久久久久久久久 | 欧美日韩视频一区二区| 岛国av免费在线| 中文在线免费一区三区| 亚洲成人免费网站| japanese中文字幕| 一区二区三区网站| 91大神在线播放精品| 懂色av中文字幕| 国产伦精品一区二区三区免费| 国产欧美一区二区视频| 精品福利视频导航大全| 亚洲男人天堂一区| 69堂免费视频| 欧美aaaaaa| 欧美精品一区二区在线播放| 蜜桃av免费看| 欧美91精品| 国产成人拍精品视频午夜网站| 一卡二卡在线视频| 91首页免费视频| 制服国产精品| 色多多在线观看| 欧美一级爆毛片| 欧美成人国产精品一区二区| 欧美成人一品| 国产精品极品美女粉嫩高清在线| 精品人妻aV中文字幕乱码色欲| 久久久久久久久久看片| 久久久久福利视频| 国产电影一区二区三区爱妃记| 欧美mv日韩mv亚洲| 手机av在线不卡| 国产精品综合色区在线观看| 成人网页在线免费观看| 国产一级免费在线观看| 夜夜操天天操亚洲| 日本黄大片一区二区三区| 国产一区二区三区亚洲| 久久国产精品久久国产精品| 午夜一级黄色片| 成人黄色国产精品网站大全在线免费观看| 亚洲春色在线| 欧美gay视频| 亚洲精品国精品久久99热一| 青娱乐在线视频免费观看| 美女久久久精品| 久久亚裔精品欧美| 91在线三级| 日韩三级在线免费观看| 日韩欧美视频免费观看| 日韩中文字幕区一区有砖一区| 国产视频99| 搞黄网站在线看| 欧美成人video| 丝袜 亚洲 另类 欧美 重口| 男女男精品网站| 日本欧美色综合网站免费| 91九色国产在线播放| 欧美一二三区在线| 精品一区二区三孕妇视频| 视频一区二区三区中文字幕| 久久婷婷人人澡人人喊人人爽| 青春草视频在线观看| 69精品人人人人| 性色国产成人久久久精品| 日本欧美一区二区| 日韩免费毛片| 2019年精品视频自拍| 亚洲人成网7777777国产| 综合网在线观看| 久久久国产综合精品女国产盗摄| 少妇无码av无码专区在线观看| 国产精品中文字幕制服诱惑| 久久久久久久国产| 天天操天天干天天爱| 欧美日韩国产中文精品字幕自在自线| av av在线| 日韩五码在线| 蜜桃麻豆91| 欧美电影免费观看高清完整| 亚洲欧美中文字幕| 夜夜爽妓女8888视频免费观看| 国产丝袜在线精品| 少妇一级淫免费放| 国产精品黑丝在线播放| 亚洲综合中文字幕68页| 啦啦啦中文在线观看日本| 亚洲第一视频网| 国产又大又粗又爽| 国产精品久线在线观看| 日日夜夜精品视频免费观看| 红桃视频亚洲| 成人av免费看| 松下纱荣子在线观看| 尤物九九久久国产精品的分类| 这里只有精品9| 亚洲激情图片qvod| 中文字幕日韩三级片| 奇米四色…亚洲| 大陆极品少妇内射aaaaaa| 麻豆一区二区麻豆免费观看| 国产精品极品在线| a级毛片免费观看在线| 亚洲激情 国产| 中文字幕91爱爱| 一区二区三区四区高清精品免费观看| 中出视频在线观看| 蜜桃久久久久久| 久久久久久www| 不卡av一区二区| 成人免费视频网站入口| 欧美不卡高清一区二区三区| 欧美成人午夜激情| 欧美日韩伦理片| 日韩三级.com| 国产精品免费无遮挡无码永久视频| 中文字幕中文字幕中文字幕亚洲无线| 美女流白浆视频| 日韩不卡一区二区| av无码久久久久久不卡网站| 成人羞羞视频在线看网址| 福利精品视频| 欧美黄页免费| 欧美亚洲视频在线看网址| 理论片午午伦夜理片在线播放| 亚洲成av人片在线观看香蕉| 在线观看国产黄| 午夜伊人狠狠久久| 香蕉成人在线视频| 91视频www| 97人人模人人爽人人澡| 久久久国产亚洲精品| 欧美日韩福利在线| 欧美电影《睫毛膏》| 欧美日韩在线一二三| 色妞ww精品视频7777| 国产精品视频公开费视频| 人成在线免费网站| 久久精品99国产精品酒店日本| 国产资源在线观看| 亚洲激情久久久| va婷婷在线免费观看| 欧美在线视频日韩| 色屁屁影院www国产高清麻豆| 亚洲国产精品一区二区久久恐怖片 | 亚洲免费观看高清完整版在线观| 91蜜桃网站免费观看| 天天综合在线观看| 国产精品高潮视频| 吉吉日韩欧美| 98精品国产自产在线观看| 色婷婷视频在线观看| 久久天天躁狠狠躁夜夜av| 2021av在线| 一区二区三区黄色| 精品欧美不卡一区二区在线观看 | 加勒比在线一区二区三区观看| 国产在线一区不卡| 国产欧美日韩视频| jizz久久久久久| 国产精品久久久久久久9999 | 亚洲少妇在线| 成人精品视频在线播放| 欧美日韩少妇| 成人在线视频一区二区三区| 欧美精品日本| 波多野结衣av一区二区全免费观看| 女人色偷偷aa久久天堂| 日产精品久久久久久久蜜臀| 韩日在线一区| 青青青免费在线| 国产乱码精品| 亚洲狼人综合干| 老司机免费视频一区二区三区| 蜜臀av免费观看| 黄网站免费久久| 国产一级二级av| 不卡的电视剧免费网站有什么| 波多野结衣影院| 91丨九色丨尤物| 少妇av片在线观看| 亚洲欧洲三级电影| 青青草成人免费| 亚洲成人动漫精品| 超碰超碰超碰超碰| 欧美日韩一区二区三区高清| 国产又粗又长又黄| 91精品国产91热久久久做人人| 亚洲国产剧情在线观看| 亚洲国产另类久久精品| 国产专区在线| 久久亚洲精品视频| 2020国产在线| 国产精品入口福利| 无码国模国产在线观看| 久久av一区二区三区漫画| 国产一区网站| 黑人巨大国产9丨视频| 尤物网精品视频| 中文久久久久久| 国产九色精品成人porny | 国产精品毛片久久久久久| 三级影片在线看| 天天操天天色综合| 中文字幕在线观看高清| 精品久久久久久最新网址| 日韩欧美电影在线观看| 日韩中文在线视频| 成人福利在线观看视频| 欧美中文字幕在线观看| 四虎成人精品一区二区免费网站| 国产伦理久久久| 久久中文字幕av一区二区不卡| 日韩精品综合在线| 免费看欧美女人艹b| 亚洲欧洲国产视频| 国产欧美日韩不卡免费| 国产精品30p| 精品视频1区2区| 四虎永久在线观看| www.日韩免费| **在线精品| 国产精品9999久久久久仙踪林 | 这里只有精品丝袜| av中文在线资源库| 国产主播喷水一区二区| 美国一区二区| 日韩亚洲欧美一区二区| 欧美中文日韩| 中文成人无字幕乱码精品区| 亚洲人亚洲人成电影网站色| 成人av网站在线播放| 亚洲成人久久久| 性欧美video高清bbw| 国产精品视频精品视频| 在线看成人短视频| 自拍日韩亚洲一区在线| 国产一区二区三区在线观看免费| 日本少妇xxxxx| 欧美天堂在线观看| 蜜桃av中文字幕| 九九热视频这里只有精品| 伦一区二区三区中文字幕v亚洲| 玛丽玛丽电影原版免费观看1977| 国产综合自拍| 久久黄色一级视频| 国产精品国产三级国产普通话三级| 亚洲不卡在线视频| 日韩精品高清在线观看| 草美女在线观看| 国产精品一区二区三区不卡| 欧美日韩一区二区国产| 中文字幕久久av| 国产精品久久夜| 中文字幕乱码人妻二区三区| 亚洲人成网站999久久久综合| 中文字幕人成乱码在线观看| 精品久久蜜桃| 一本久道久久久| 日韩片在线观看| 日韩欧美国产网站| 蜜芽tv福利在线视频| 国产激情久久久| 加勒比久久综合| 免费一级特黄录像| 国产精品网站在线| 亚洲在线观看av| 日韩视频精品在线| 亚洲成人毛片| www.69av| a级高清视频欧美日韩| 亚州国产精品视频| 精品亚洲aⅴ在线观看| 欧洲亚洲两性| 亚洲一区三区| 国产麻豆午夜三级精品| 草视频在线观看| 亚洲第一精品夜夜躁人人爽| 日韩影院在线| 日本一区二区精品视频| 久久精品国产77777蜜臀| 亚洲AV成人无码网站天堂久久| 欧美精品99久久久**| 亚洲丝袜精品| 久久精品一区二区三区不卡免费视频| 老司机精品导航| 人人澡人人澡人人看| 欧美大胆一级视频| 超碰在线cao| 日本成人三级电影网站| 老司机午夜精品99久久| 青青草手机视频在线观看| 亚洲大胆人体视频| 伊人久久高清| 7777在线视频| 91麻豆精品视频| 又色又爽又黄无遮挡的免费视频| 久久最新资源网| 少妇一区二区三区| 污色网站在线观看| 亚洲一区精品在线| 黄色在线视频观看网站| 成人激情电影一区二区| 亚洲精选成人| www.4hu95.com四虎| 日韩美女一区二区三区| 欧美黑人巨大xxxxx| 欧洲美女和动交zoz0z| 99久久精品免费精品国产| 国产偷人爽久久久久久老妇app| 欧美成人精品影院| 国产成人一区| 久久久久亚洲av成人网人人软件| 在线观看网站黄不卡| 肉体视频在线| 亚洲7777| 99久久精品国产一区| 国产欧美日韩成人| 国产成人久久久| 亚洲麻豆一区|