日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

你还不会创建jQuery插件 ?

發布時間:2025/7/14 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 你还不会创建jQuery插件 ? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
如何創建一個jQuery插件
為什么要創建jQuery插件 ? 因為這樣代碼可以復用。我們有這樣一個頁面,頁面上面有如下的文字(看源碼),我們想要的效果是,當鼠標移到鏈接的時候,用一個浮動的div來顯示a標簽的title內容.

這是通過js來完成的。假設有一個方法tooltip(), 你只需要調用這個方法就能達成你的愿望,就像這樣:

$('a.tooltip').tooltip({ ?rounded: true ?}); ?

假設我們把插件命名為tooltip,則需要定義一個jQuery.tooltip.js文件。這樣命名只是為了說明這是jQuery的插件,實際上你可以隨便命名這個文件名。下面來開始寫我們的插件:

(function($){?# ? ...code?})(jQuery);

插件的代碼必須包含在這個格式里。這里要注意,要確保你沒有使用別的js庫,否則這個美元符$,會發生沖突,如果要避免產生這種沖突,你最好在插件里都使用jQuery字符來代替美元符。
我們首先來定義插件函數:

$.fn.tooltip = function(options) {...}


然后設置默認的參數:

var ?defaults = {?background : '#e3e3e3',?color : 'black',?rounded: false?},

然后再用setting變量來接收用戶自定義的參數,使用extend方法來merge這些參數。

settings = $.extend({}, defaults, options);


現在要開始寫方法了,用戶如果使用這個插件的時候,傳入的jquery dom對象可能不只是一個元素,我們需要給每個class為tooltip的a標簽都綁定好這個事件,那么就需要迭代了,這里jquery提供了each方法:

this.each(function() {?var $this = $(this);?var title = this.title;?... ...}


這里為什么要用$this呢? 這是為了提醒自己,正在和jQuery對象打交道。
然后寫鼠標事件等等,來看最后的代碼:

(function($){?$.fn.tooltip = function(options) {?var?defaults = {?background: '#e3e3e3',?color: 'black',?rounded: false?},?settings = $.extend({}, defaults, options);?this.each(function() {?var $this = $(this);?var title = this.title;?if($this.is('a') && $this.attr('title') != '') {?this.title = '';?$this.hover(function(e) {?// mouse over?$('')?.appendTo('body')?.text(title)?.hide()?.css({?backgroundColor: settings.background,?color: settings.color,?top: e.pageY + 10,?left: e.pageX + 20?})?.fadeIn(350);?if(settings.rounded) {?$('#tooltip').addClass('rounded');?}?}, function() {?// mouse out?$('#tooltip').remove();?}); ?}?$this.mousemove(function(e) {?$('#tooltip').css({?top: e.pageY + 10,?left: e.pageX + 20?});?});?});?// returns the jQuery object to allow for chainability.?return this;?}?})(jQuery);?


總結:
1. 這里有個小技巧,假如要定義多個變量:var a = {};var b = {};var c = {};可以這么寫:vara = {},b = {},c = {};

2.插件代碼里,循環內的this, 循環外的this,循環內的$(this)的關系, 實際上是jQuery對象和dom對象的關系。
頁面上調用插件方法,插件方法內部的each外的this,則是jQuery對象,這個對象是個集合對象,也就是$('a.tooltip')這個對象,頁面上共有2個class為tooltip的a標簽。
jquery對象的$方法,返回的是jquery集合對象,里面的元素,如果你用get方法去調用得到的是dom,你用eq方法調用得到的是jquery對象,比如:$('a').eq(0)得到的是jquery對象$('a').get(0)得到的是dom對象,直接$('a')[0]得到的是dom對象,而jquery的each方法,我認為是迭代的是dom對象,而不是jquery對象,所以在each里面this是dom對象,而需要$(this)來得到jquery對象來進行操作 。把這個關系搞清楚就行了。?

轉載于:https://blog.51cto.com/blackanger/132338

總結

以上是生活随笔為你收集整理的你还不会创建jQuery插件 ?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。