jQuery 插件開髮指南:創建可複用的組件
核心要點:
fn
函數定義,添加到 jQuery 庫的方法會將 jQuery 對像作為 JavaScript 的 this
對像傳遞。 extend
函數合併默認參數和用戶參數。 this
以允許其他函數進行鍊式調用,這是 jQuery 的關鍵特性,稱為“鍊式調用”。插件應以 .js
擴展名保存,並在 jQuery 庫加載後包含在 HTML 頁面中。 jQuery 是最流行的 JavaScript 庫,許多網站都採用它來實現動態效果和 Ajax 功能。然而,相對較少的開發者深入研究插件開發。本教程將創建一個簡單的插件來解釋其基礎知識。我們的代碼將反轉一個或多個選定節點中的文本——查看演示頁面。
為什麼要創建 jQuery 插件?
簡而言之:復用。通過擴展 jQuery,您可以創建可在任何網頁上復用的組件。您的代碼被封裝,並且您不太可能在其他地方使用相同的函數名。
jQuery 的工作原理
在核心部分,jQuery 會接收 DOM 元素或包含 CSS 選擇器的字符串。它返回一個 jQuery 對象,這是一個類似數組的 DOM 節點集合。然後可以將一個或多個方法 鍊式調用 到這組節點,例如:
// 将所有 <p> 标签的颜色设置为红色 $("p").css("color", "red");</p>
注意:儘管 jQuery 庫名為“jQuery”,但“$”是引用它的快捷變量。請注意,其他庫可能會佔用“$”。
jQuery 插件的工作原理
jQuery 允許向其庫中添加方法。調用這些方法時,會將 jQuery 對像作為 JavaScript 的 this
對像傳遞。可以根據需要操作 DOM 節點,並且方法應返回 this
,以便可以鍊式調用其他函數。我們的示例插件將使用如下代碼調用:
// 反转所有 <p> 标签中的文本 $("p").reverseText();</p>
我們還將添加兩個可選參數:minlength
和 maxlength
。如果定義了這兩個參數,則字符串長度必須在這兩個限制之間才能進行反轉。
插件聲明
插件使用 jQuery 的 fn
函數定義,例如:
// 将所有 <p> 标签的颜色设置为红色 $("p").css("color", "red");</p>
使用“jQuery”而不是“$”可以確保不會與其他 JavaScript 庫衝突。我們所有的內部代碼也應該引用“jQuery”而不是“$”。但是,我們可以使用匿名函數來節省一些輸入並減小文件大小:
// 反转所有 <p> 标签中的文本 $("p").reverseText();</p>
此函數立即運行,並將 jQuery 作為名為“$”的參數傳遞。由於“$”是一個局部變量,我們可以假設它始終引用 jQuery 庫,而不是第一個獲取全局“$”變量的另一個庫。
插件參數
我們的插件需要兩個參數:minlength
和 maxlength
。最簡單的方法是將它們定義為函數參數,例如:
jQuery.fn.reverseText = function(params) { ... };
但是,如果我們決定稍後添加更多參數怎麼辦?我們的插件可能會有數十個選項——參數處理很快就會變得複雜。作為替代方案,我們可以傳遞單個 JSON 對象,例如:
(function($) { $.fn.reverseText = function(params) { ... }; })(jQuery);
reverseText
函數的第一行應該定義一組默認參數,然後用任何用戶定義的值 覆蓋 這些參數。 jQuery 的 extend
函數可以幫我們處理這個問題:
(function($) { $.fn.reverseText = function(minlength, maxlength) { ... }; })(jQuery); // 示例 $("p").reverseText(0, 100);
因此,除非調用代碼覆蓋這些值,否則 params.minlength
為 0,params.maxlength
為 99999。
插件代碼
現在我們可以編寫我們的主要插件代碼:
(function($) { $.fn.reverseText = function(params) { ... } })(jQuery); // 示例 $("p").reverseText( { minlength: 0, maxlength: 100 } );
解釋:
this.each
函數遍歷所有 jQuery DOM 節點並調用一個匿名函數。 $t
,以便我們可以運行 jQuery 方法。 origText
被賦值為 DOM 節點中的文本字符串。 newText
設置為空字符串。 origText
的長度在 params.minlength
和 params.maxlength
之間,則循環在 newText
中創建一個反轉的文本字符串。然後相應地更新 DOM 節點。 不要破壞鍊式調用!
最後,我們應該記住返回 jQuery 對象,以便可以鍊式調用其他方法:
// 合并默认参数和用户参数 params = $.extend( {minlength: 0, maxlength: 99999}, params);
完整的代碼
我們的插件代碼現在已完成:
// 遍历所有节点 this.each(function() { // 将单个节点表示为 jQuery 对象 var $t = $(this); // 查找文本 var origText = $t.text(), newText = ''; // 文本长度是否在定义的限制内? if (origText.length >= params.minlength && origText.length <= params.maxlength) { for (var i = origText.length; i--; ) newText += origText.substr(i, 1); $t.text(newText); } });
此文件保存為 jquery.reversetext.js
。然後,我們可以在 jQuery 庫加載後將其包含在任何 HTML 頁面中,例如:
return this;
此頁面中的列表現在在第一個和第三個項目符號中反轉了文本(記住,第一個項目從 0 開始編號):
資源:
您現在應該對 jQuery 插件開發有了很好的了解。 SitePoint JavaScript 論壇也是一個尋求幫助和建議的好資源。即將推出:一個新的三部分教程,介紹如何將有用的頁面組件構建為 jQuery 插件。
(此處省略了原文檔中的FAQ部分,因為該部分內容與偽原創要求不符,且篇幅過長。)
以上是如何開發jQuery插件的詳細內容。更多資訊請關注PHP中文網其他相關文章!