jquery 外掛開發/外掛編寫$.fn.extend(),$.extend()
jquery外掛開發大概有三種方式: 1,$.extend()-在jquery名稱空間即jquery本身上新增靜態方法;呼叫,例如:$.myPlugin();而非$('ele').myPlugin(); 2,$.fn.extend()-
3,$.widget()-
$.extend({ createNum:function(name){ return 'hello '+(name?name:'andy'); } }); console.log($.createNum());//hello andy console.log($.createNum('jack'));// hello jack
html:
<div id="ex-div">
<p><b>劉德華</b></p>
<p><b>張學友</b></p>
<p><b>黎明</b></p>
<p><b>郭富城</b></p>
</div>
以上程式碼通過$.extend()方法想jquery新增的,直接通過$呼叫; 但是,發現這種擴充套件方式無法通過DOM選擇器來觸發,這個時候我們就需要考慮$.fn.extend()的擴充套件方式了; 如下,基本格式:
$.fn.sayHello= function(){
// to do
};
/*
現在我們將頁面中的字改變顏色
* */
$.fn.changeColor = function(){
this.css('color','red');// this 即選中的元素;當前指$('p')
};
// 呼叫如下:
$('#ex-div p').changeColor();
當然,其實在外掛程式碼裡我們經常處理某個具體的元素,而不是一個元素的集合
上面的程式碼,this指的是jquery選擇器返回的集合,我們可以通過jquery中的$.each()方法處理集合中的每個元素了;
但是,在each方法內部,this指代的就是普通的DOM元素了,如果需要呼叫jquery的方法那就需要用$來重新包裝一下;
現在我們來處理,在每個p標籤裡面加上一個i標籤,內容為-香港
$.fn.changeConts = function(){
//這裡對this是用jquery選中的元素\
var _html = '<i>-香港</i>'
this.css('color','red');
this.each(function(){
//對每個元素進行操作
$(this).append(_html);
});
};
$('#ex-div p').changeConts();
我們又豐富了外掛,接下來我們繼續接受引數的延伸 為了讓外掛支援鏈式呼叫,我們需要return一下;
$.fn.changeConts = function(){
//這裡對this是用jquery選中的元素\
var _html = '<i>-香港</i>'
this.css('color','red');
return this.each(function(){
//對每個元素進行操作
$(this).append(_html);
});
};
$('#ex-div').css('border','1px solid red').find('p').changeConts();
接下來,我們就處理引數的部分; 比如現在我們處理字型的顏色,由使用者來定義顏色,如果使用者沒有定義,我們就取預設值 說明一點: 在處理外掛引數的接收上,通常使用jquery的extend方法,上面也提及過,但那是給extend方法傳遞單個物件的情況下, 這個物件會合併到jquery身上,所以我們就可以在jquery身上呼叫新合併物件裡包含的方法了,如上面的例子; 當給extend方法傳遞一個以上的引數時,它會將所有到引數物件合併到第一個裡. 同時,如果物件中有同名的屬性,合併後後面的引數會覆蓋前面的; 利用這一點,我們可以在外掛裡定義一個儲存外掛引數預設值的物件,同時將接收來的引數物件合併到預設物件上, 最後便實現了使用者指定引數使用的值,未指定的引數使用預設值; 我們定義下font-size,允許外掛呼叫的時候設定字型;
$.fn.extend({
changeConts: function (options) {
var defaults = {
'color':'red',
'fontSize':'12px'
};
var setting = $.extend(defaults,options);
return this.css({
'color':setting.color,
'fontSize':setting.fontSize
});
}
});
//未指定字型大小的時候,預設值為12px
$('#ex-div p').changeConts({
'color':'blue'
});
//我們來指定字型大小
$('#ex-div p').changeConts({
'color':'red',
'fontSize':'20px'
});
雖然實現了引數的傳遞,但是我們沒有保護包引數
我們可以看到呼叫extend時,會將defaults的值改變,這樣不是我們期望的,我們希望它維持原樣,方便其它呼叫; 一個好的做法是,將一個新的空物件作為$.extend的第一個引數,defaults和使用者傳遞的引數緊跟其後, 這樣做的好處就是所有值都合併到這個空物件上,保護了外掛裡面到預設值;
$.fn.extend({
changeConts:function(options){
var defaults = {
'color':'red',
'fontSize':'12px'
};
var setting = $.extend({},defaults,options);
return this.css({
'color':setting.color,
'fontSize':setting.fontSize
});
}
});
$('#ex-div p').changeConts({
'color':'blue',
'fontSize':'20px'
});
至此,外掛可以接受引數和處理引數後,就可以愉快的編寫外掛了; 若要編寫一個龐大的優雅的外掛,我們需要將外掛包裝到一個物件上,用面向物件的思維進行開發; 如果將需要的重要變數定義到物件的屬性上,函式變成物件的方法,當我們需要的時候通過物件獲取, 一來方便管理,二來不會影響外部名稱空間,因為這些所有的變數名和方法名都是在物件內部; 接下來,我們來優化程式碼
// 定義Slipactive的建構函式;
function Slipactive(ele,opt){
this.$element = ele;
this.dafaults = {
'color':'red',
'fontSize':'12px',
'textDecoration':'none'
};
this.options = $.extend({},this.dafaults,opt)
}
Slipactive.prototype = {
constructor:Slipactive,
slipactive:function(){
this.$element.css({
'color':this.options.color,
'fontSize':this.options.fontSize,
'textDecoration':this.options.textDecoration
});
return this;
}
};
// 在外掛中使用Slipactive物件
$.fn.extend({
mySlipa:function(options){
// 建立Slipactive
var slipactive = new Slipactive(this,options);
// 呼叫方法
return slipactive.slipactive();
}
});
$('#ex-div p').mySlipa({
'color':'blue',
'fontSize':'30px'
});
以上便是面向物件,也更好維護和理解,以後要新增新方法,只需向物件新增新變數和方法就行, 然後便可以在外掛例項化後即可呼叫新新增的東西
$('#ex-div p').mySlipa({
'color':'blue',
'fontSize':'30px',
'textDecoration':'underline'
});
至此,外掛開發已經完畢; 接下來,我們來做些錦上添花的東西;例如優化名稱空間,變數等 其實,我們在寫js的時候就應該不要汙染全域性變數;我們可以採用閉包包裹程式碼
(function(){
function Slipactive(ele,opt){
this.$element = ele;
this.dafaults = {
'color':'red',
'fontSize':'12px',
'textDecoration':'none'
};
this.options = $.extend({},this.dafaults,opt)
}
Slipactive.prototype = {
constructor:Slipactive,
slipactive:function(){
this.$element.css({
'color':this.options.color,
'fontSize':this.options.fontSize,
'textDecoration':this.options.textDecoration
});
return this;
}
};
// 在外掛中使用Slipactive物件
$.fn.extend({
mySlipa:function(options){
// 建立Slipactive
var slipactive = new Slipactive(this,options);
// 呼叫方法
return slipactive.slipactive();
}
});
})();
自呼叫匿名函式裡面的程式碼會在第一時間執行;
然後,將系統變數以引數形式傳遞到外掛內部也是個不錯的實踐;
這樣,window等系統變數在外掛內部就有了一個區域性的引用,可以提高訪問效率;
結構如下:
;(function($,window,document,undefiend){
// to do
})(jQuery,window,document);
最後解釋下undefiend
為了得到沒有被修改的undefiend,我們並沒有傳遞這個引數,但是卻在接收的時候接收了它,
因為實際上並沒有傳,所以'undefiend'那個位置接收到的就是真正的undefiend了;
至此,完畢!
相關推薦
jquery 外掛開發/外掛編寫$.fn.extend(),$.extend()
jquery外掛開發大概有三種方式: 1,$.extend()-在jquery名稱空間即jquery本身上新增靜態方法;呼叫,例如:$.myPlugin();而非$('ele').myPlugin(); 2,$.fn.extend()- 3,$.widget()-$.ext
eclipse外掛開發(匯出外掛,安裝外掛)
僅工作中使用到,現查現用,理解不到位,請持懷疑態度檢視本文。如有問題請聯絡郵件:[email protected]; 以便交流。 匯出外掛 參考文章:http://www.th7.cn/Program/java/201308/147987.shtml 文章講
android外掛開發——載入外掛
在閱讀本博文的時候,我假設你已經閱讀了我之前寫的幾篇。猛擊此處 通過前面的幾篇部落格,我們解決了如何啟動一個並沒有在ActivityManifest.xml中宣告的activity。但是有很多細心的讀者私信我說,我們所有的例子裡,外掛都是和主工程在一起的呀,我
jQuery外掛開發jQuery.extend(object)和jQuery.fn.extend()
jQuery外掛開發分為2種 1、類級別 類級別你可以理解為拓展jquery類,最明顯的例子是$.ajax(...),相當於靜態方法。 開發擴充套件其方法時使用$.extend方法,即jQuery.extend(object); 程式碼如下: $.extend({ add:func
jQuery外掛開發全解析,jQuery.extend , (function($){ , $.fn.pluginName,jqueryAPI參考文件
http://www.w3school.com.cn/jquery/event_focus.asp jqueryAPI參考文件 序:匿名函式,匿名函式沒有實際名字,也沒有指標,怎麼執行滴? 其實大家可以看看小括號的意義就應該可以理解。小括號有返回值,也就是
jquery外掛開發;(function ( $, window, document, undefined ){}(jQuery, window,document)分析
經常看到許多jquery外掛是這種形式: 1 2 3 ;(function( $, window, document, undefined ){}){ //...code }(jquery,window,docu
JQuery外掛開發入門
個人比較喜歡封裝,現在學習JQuery,總想封裝出自己喜歡的外掛,所以將JQuery外掛的開發稍加總結。 本文並不全面,主要針對自定義外掛的分類和語法進行總結,希望以後可以作為工具檢視。 注: jQuery外掛的完整開發文件可參考 類級別的外掛: 1、新增一個函式 1 jQuery.f
jQuery 外掛開發方法學習
文件介紹: 通過全面瞭解jquery外掛來學習如何自己動手編寫jquery外掛 http://www.aijquery.cn/Html/jqueryrumen/126.html jquery編寫外掛的方法 https://www.cnblogs.com/yuqingfamily/p/5813
jQuery外掛開發精品教程,讓你的jQuery提升一個臺階
要說jQuery 最成功的地方,我認為是它的可擴充套件性吸引了眾多開發者為其開發外掛,從而建立起了一個生態系統。這好比大公司們爭相做平臺一樣,得平臺者得天下。蘋果,微軟,谷歌等巨頭,都有各自的平臺及生態圈。 學會使用jQuery並不難,因為它簡單易學,並且相信你接觸jQuery後肯定也使用或熟悉了不少其外掛
JavaScript學習總結(四)——jQuery外掛開發與釋出
jQuery外掛就是以jQuery庫為基礎衍生出來的庫,jQuery外掛的好處是封裝功能,提高了程式碼的複用性,加快了開發速度,現在網路上開源的jQuery外掛非常多,隨著版本的不停迭代越來越穩定好用,在jQuery官網有許多外掛: 一、外掛開發基礎 1.1、$.exten
jQuery自定義導航外掛的開發過程
前言 在開發過程中,我們經常會使用到外掛,其具有方便靈活的特點,但是如果在市面上找不到自己滿意的外掛,或者想自己封裝一個外掛提供給別人使用時,就需要自己編寫一個jQuery外掛了。 按照功能來分類,外掛可以分為以下三類: 1.封裝物件方法的外掛(就是基於D
jQuery外掛開發基礎入門
在實際開發工作中,總會碰到像滾動,分頁,日曆等展示效果的業務需求,對於接觸過jQuery以及熟悉jQuery使用的人來說,首先想到的肯定是尋找現有的jQuery外掛來滿足相應的展示需求。目前頁面中常用的一些元件,都有多種jQuery外掛可供選擇,網路上也有很多專門收集jQuery外掛的網站。利用jQuery外
jQuery外掛開發-----tab選項卡
經過實踐,發現我不是一個能夠堅持的人,所以一有計劃馬上執行,為了每天保持學習,敲程式碼,所以不斷看視訊教程,看書,當年成為學渣就是因為不能重複看一本書。為了分擔家裡負擔,好書重複翻看,好的視訊教程重複看,忍忍也就過去了,我需要提升! 關於外掛,之前文章講過,this指向要
jQuery外掛開發學習
1、jQuery外掛編寫準備 要使用jQuery進行自定義外掛的編寫,首先應該的是瞭解jQuery的外掛機制或者說是通過jQuery庫本身提供的哪些函式進行外掛的編寫,主要涉及的兩個函式是:jQuery.extend(object)和jQuery.fn.extend(o
4、jQuery面向物件之簡單的外掛開發
(function($){ /** * 這裡需要一些方法 * 查詢方法 * 修改的方法 * 刪除的方法 */ $.fn.GridPanel = { /** * 初始化事件
jquery外掛開發學習筆記(五)——動態選擇觸發器
(function ($) { //var trigger_chosen; // if($("#test002").attr("checked")){ // trigger_chosen=$("#test002").val(); //
JQuery如何自定義外掛——$.fn的使用
JQuery提供了很多多的外掛,粗略一搜,發現還不能用很多來形容: 點了幾個看了看,發現都相當精美,web開
jQuery外掛開發
Lightweight Start 模式 1.什麼是Lightweight模式 這種模式適合於外掛開發新手或者是隻是想實現簡單的功能,Lightweight start使用了以下內容: 常見最佳實踐 window、document和undefined
最簡單的jquery外掛開發示例
頁面三個DIV,一個按鈕。 點選按鈕後,三個DIV的高度調整為相同。 <!DOCTYPE html> <html> <head> <style> div { width: 40px;
phonegap3.4外掛開發入門例子
根據官方文件(3.4.0)的外掛開發指南: http://docs.phonegap.com/en/3.4.0/guide_hybrid_plugins_index.md.html#Plugin%20Development%20Guide http://docs.phonegap.com/e