欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

怎么編寫jquery插件

這篇文章給大家分享的是有關怎么編寫jquery插件的內(nèi)容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

創(chuàng)新互聯(lián)公司自2013年起,先為郴州等服務建站,郴州等地企業(yè),進行企業(yè)商務咨詢服務。為郴州企業(yè)網(wǎng)站制作PC+手機+微官網(wǎng)三網(wǎng)同步一站式服務解決您的所有建站問題。

類型

jQuery的插件主要分為3種類型

1、封裝對象方法

這種插件是將對象方法封裝起來,用于對通過選擇器獲取的jQuery對象進行操作,是最常見的一種插件。此類插件可以發(fā)揮出jQuery選擇器的強大優(yōu)勢,有相當一部分的jQuery的方法,都是在jQuery腳本庫內(nèi)部通過這種形式“插”在內(nèi)核上的,例如:parent()方法、appendTo()方法等。這些方法在現(xiàn)在來看都是jQuery本身自帶的方法了。平時,我們是可以直接拿來就用的,只需引入jQuery庫就行

2、封裝全局函數(shù)

可以將獨立的函數(shù)加到jQuery命名空間下,如常用的jQuery.ajax()、去首尾空格的jQuery.trim()方法等,都是jQuery內(nèi)部作為全局函數(shù)的插件附加到內(nèi)核上去的

3、選擇器插件

雖然jQuery的選擇器十分強大,但是在少數(shù)情況下,還是會需要用到選擇器插件來擴充一些自己喜歡的選擇器

要點

1、jQuery插件的文件名推薦命名為jQuery.[插件名].js,以免和其他JS庫插件混淆

2、所有的對象方法都應當附加到jQuery.fn對象上,而所有的全局函數(shù)都應當附加到jQuery對象本身上

3、在插件內(nèi)部的this指向的是當前通過選擇器獲取的jQuery對象,而不像一般方法那樣,如click,內(nèi)部的this指向的是DOM元素

4、可以通過this.each來遍歷所有的元素

5、所有的方法或函數(shù)插件,都應當以分號結(jié)尾。否則壓縮的時候可能出現(xiàn)問題。為了穩(wěn)妥些,甚至可以在插件頭部先加上一個分號,以免他人不規(guī)范的代碼影響自身的插件代碼

6、插件應該返回一個jQuery對象,以保證插件的可鏈式操作

7、避免在插件內(nèi)部使用$作為jQuery對象的別名,而應使用完整的jQuery來表示,避免沖突。當然,也可以利用閉包來回避這種問題,使插件內(nèi)部繼續(xù)使用$作為jQuery的別名

閉包

利用閉包的特性,即可以避免內(nèi)部臨時變量影響全局空間,又可以在插件內(nèi)容繼續(xù)使用$作為jQuery的別名。常見的jQuery插件都是以下這種形式的:

(function(){
  /*這里放置代碼*/ 
})();

首先定義一個匿名函數(shù)function(){/*這里放置代碼*/},然后用括號括起來,變成(function(){/*這里放置代碼*/})這種形式,最后通過()這個運算符來執(zhí)行。可以傳遞參數(shù)進行,以供內(nèi)部函數(shù)使用

//為了更好的兼容性,開始前有個分號
;(function($){    //此處將$作為匿名函數(shù)的形參
  /*這里放置代碼,可以使用$作為jQuery的縮寫別名*/
})(jQuery);      //這里就將jQuery作為實參傳遞給匿名函數(shù)了

上面的代碼是一種常見的jQuery插件的結(jié)構(gòu)

插件機制

jQuery提供了兩個用于拓展jQuery功能的方法,即jQuery.fn.extend()方法和jQuery.extend()方法。jQuery.fn.extend()方法用于拓展封裝對象方法的插件,jQuery.extend()方法用于拓展封裝全局函數(shù)的插件和選擇器插件。這兩個方法都接受一個參數(shù),類型為Object。Object對象的"名/值對"分別代表"函數(shù)或方法名/函數(shù)主體"

【jQuery.fn.extend()】

jQuery.fn.extend()方法用于將一個對象的內(nèi)容合并到jQuery的原型,以提供新的jQuery實例方法

<label><input type="checkbox" name="foo"> Foo</label>
<label><input type="checkbox" name="bar"> Bar</label>
<button id="btn1">全選</button>
<button id="btn2">全不選</button>
<script>
jQuery.fn.extend({
 check: function() {
  return this.each(function() { this.checked = true; });
 },
 uncheck: function() {
  return this.each(function() { this.checked = false; });
 }
});
$('#btn1').click(function(){
 $( "input[type='checkbox']" ).check();
});
$('#btn2').click(function(){
 $( "input[type='checkbox']" ).uncheck();
});
</script>

【jQuery.extend()】

jQuery.extend()方法用一個或多個其他對象來擴展一個對象,然后返回被擴展的對象

jQuery.extend( target [, object1 ] [, objectN ] )

例如,合并settings對象和options對象,修改并返回settings對象

var settings = {validate:false,limit:5,name:"foo"};
var options = {validate:true,name:"bar"};
var newOptions = jQuery.extend(settings,options);
console.log(newOptions);//Object {validate: true, limit: 5, name: "bar"}
  jQuery.extend()方法經(jīng)常被用于設置插件方法的一系列默認參數(shù)
function foo(options){
  options=jQuery.extend({
    name:"bar",
    length:5,
    dataType:"xml"
  },options);
}

如果用戶調(diào)用foo()方法的時候,在傳遞的參數(shù)options對象設置了相應的值,那么就使用設置的值,否則使用默認值

通過使用jQuery.extend()方法,可以很方便地用傳入的參數(shù)來覆蓋默認值。此時,對方法的調(diào)用依舊保持一致,只不過要傳入的是一個映射而不是一個參數(shù)列表。這種機制比傳統(tǒng)的每個參數(shù)都去檢測的方式不僅靈活而且更加簡潔。此外使用命名參數(shù)意味著再添加新選項也不會影響過去編寫的代碼,從而使開發(fā)者使用起來更加直觀明了

編寫插件

1、封裝jQuery對象方法的插件

編寫設置和獲取顏色的插件color(),該插件用于實現(xiàn)以下兩個功能:

(1)設置匹配元素的顏色

(2)獲取匹配的元素(元素集合中的第一個)的顏色

由于是對jQuery對象的方法拓展,因此采用拓展第一類插件的方法jQuery.fn.extend()來編寫,這里給這個方法提供了一個參數(shù)value,如果調(diào)用方法的時候傳遞了value這個參數(shù),那么就是用這個值來設置字體顏色,否則就是獲取匹配元素的字體顏色的值

;(function(){
  jQuery.fn.extend({
    "color":function(value){
      if(value == undefined){
        return this.css("color");
      }else{
        return this.css("color",value);
      }     
    }       
  }); 
})(jQuery);

實際上,CSS()方法內(nèi)容已經(jīng)有判斷value是否為undefined的機制,所以才可以根據(jù)傳遞參數(shù)的不同而返回不同的值。因此,代碼可以刪減如下

;(function(){
  jQuery.fn.extend({
    "color":function(value){
      return this.css("color",value);   
    }       
  }); 
})(jQuery);
<span id="test">測試文字</span>
<input type="color" id="color">
<script>
;(function($){
 $.fn.extend({
  "color":function(value){
   return this.css("color",value);   
  }       
 }); 
})(jQuery);
$('#color').on('change',function(){
 $('#test').color($(this).val());
})
</script>

另外,如果要定義一組插件,可以使用如下所示寫法:

;(function(){
  jQuery.fn.extend({
    "color":function(value){
     //插件代碼
    },
    "border":function(value){
     //插件代碼
    },
    "background":function(value){
     //插件代碼
    }       
  }); 
})(jQuery);

2、封裝全局函數(shù)的插件

這類插件是在jQuery命名空間內(nèi)部添加一個函數(shù)

例如新增兩個函數(shù),用于去除左側(cè)和右側(cè)空格。雖然jQuery已經(jīng)提供了jQuery.trim()方法來去除兩端空格,但在某些情況下,會只希望去除某一側(cè)的空格

去除左側(cè)、右側(cè)的空格的函數(shù)分別寫成如下jQuery代碼。(text||"")部分是用于防止傳遞進來的text這個字符串變量處于未定義的特殊狀態(tài),如果text是undeined,則返回字符串"",否則返回字符串text。這個處理是為了保證接下來的字符串替換方法replace()方法不會出錯

;(function($){
  $.extend({
   ltrim:function( text ){
      return (text || "").replace(/^\s+/g,"");
    },
    rtrim:function(   text ){
        return (text || "").replace(/\s+$/g,"");
    }
  }); 
})(jQuery);
var $str = "  test  ";
console.log($.trim($str));//'test'
console.log($.ltrim($str));//'test  '
console.log($.rtrim($str));//'  test'

3、自定義選擇器

jQuery以其強大的選擇器著稱,那么jQuery的選擇器的工作原理是什么呢?

jQuery的選擇解析器首先會使用一組正則表達式來解析選擇器,然后針對解析出的每一個選擇符執(zhí)行一個函數(shù),稱為選擇函數(shù)。最后根據(jù)這個選擇函數(shù)的返回值為true還是false來決定是否保留這個元素,這樣就可以找到匹配的元素節(jié)點

如$("div:gl(1)"),該選擇器首先會獲取所有的<div>元素,然后隱式地遍歷這些<div>元素,并逐個將這些<div>元素作為參數(shù),連同括號里的“1”等一些參數(shù)一起傳遞給gt對應的選擇器函數(shù)進行判斷。如果返回true則保留,否則不保留,這樣得到的結(jié)果就是一個符合要求的<div>元素的集合

選擇器的函數(shù)一共接受3個參數(shù),形式如下:

function (a,i,m){
     //...
}

第一個參數(shù)為a,指的是當前遍歷到的DOM元素

第二個參數(shù)為i,指的是當前遍歷到的DOM元素的索引值,從0開始

第三個參數(shù)是m,它是由jQuery正則解析引擎進一步解析后的產(chǎn)物,是一個數(shù)組:其中最重要的一個是m[3],在$("div:gl(1)")中即為括號里的數(shù)字“1”。

在jQuery中已經(jīng)有l(wèi)t、gt和eq選擇器,因此這里寫一個介于兩者之間(between)的選擇器

思路:在上面的三個參數(shù)中,m[3]為"a,b"的形式,因此把m[3]用","分隔,然后跟索引值i進行對比,如果i在m[3]表示的范圍之間就返回true,否則為false

;(function($){
  $.extend($.expr[":"],{
    between:function(a,i,m){
      var temp=m[3].split(",");
      return +temp[0]<i&&i<+temp[1];
    }
  });
})(jQuery);

[注意]經(jīng)測試,函數(shù)中第二個參數(shù)i的值始終為0,無法獲取索引值,這時就需要自造索引,代碼如下

;(function($){
  var $index = -1;
  $.extend($.expr[":"],{
    between:function(a,i,m){
      var temp=m[3].split(",");  
      $index++;   
      return +temp[0]<$index&&$index<+temp[1];

    }
  });
})(jQuery);
<div>
 <i>0</i>
 <i>1</i>
 <i>2</i>
 <i>3</i>
 <i>4</i>
 <i>5</i>
</div>
<button id="btn">測試</button>
<script>
;(function($){
  var $index = -1;
  $.extend($.expr[":"],{
    between:function(a,i,m){
      var temp=m[3].split(",");  
      $index++;   
      return +temp[0]<$index&&$index<+temp[1];
    }
  });
})(jQuery);
$('#btn').click(function(){
 $('i:between(1,5)').css('background','lightblue');
});
</script>

感謝各位的閱讀!關于“怎么編寫jquery插件”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

新聞標題:怎么編寫jquery插件
轉(zhuǎn)載注明:http://chinadenli.net/article34/ihgpse.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供軟件開發(fā)ChatGPT、商城網(wǎng)站品牌網(wǎng)站設計、響應式網(wǎng)站關鍵詞優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站網(wǎng)頁設計
91精品国产综合久久不卡| 深夜福利欲求不满的人妻| 开心久久综合激情五月天| 国产一级精品色特级色国产| 国产一级性生活录像片| 国产精品一区欧美二区| 欧美成人久久久免费播放| 日韩精品一区二区三区av在线| 日本中文在线不卡视频| 一级欧美一级欧美在线播| 很黄很污在线免费观看| 91插插插外国一区二区| 超碰在线免费公开中国黄片| 亚洲国产成人一区二区在线观看| 国产亚洲欧美日韩精品一区| 欧美一级不卡视频在线观看| 激情内射亚洲一区二区三区 | 一区二区三区免费公开| 日本不卡在线视频你懂的| 色婷婷视频在线精品免费观看| 91福利视频日本免费看看| 尤物久久91欧美人禽亚洲| 五月婷婷六月丁香狠狠| 欧美做爰猛烈叫床大尺度| 亚洲免费观看一区二区三区| 日本加勒比在线观看不卡| 五月婷婷六月丁香亚洲| 日本高清加勒比免费在线| 国产精品一区二区日韩新区| 国产一区二区三区av在线| 国产老女人性生活视频| 久久老熟女一区二区三区福利| 国产欧美一区二区另类精品| 日韩一级欧美一级久久| 国产一区二区精品丝袜| 欧美日韩国产精品黄片| 日本亚洲欧美男人的天堂| 亚洲精品成人综合色在线| 九九热这里有精品20| 午夜亚洲少妇福利诱惑| 人妻内射在线二区一区|