jQueryプラグイン開発の標準的な書き方
前書き
現在、Web 開発には jquery がほぼ不可欠となっており、VS アーティファクトでも 2010 バージョンから Web プロジェクトに Jquery と ui が組み込まれ始めました。 jquery を使用する利点については、ここでは詳しく説明しません。jquery を使用したことのある人なら誰でも知っているでしょう。今日は、jquery のプラグイン メカニズムについて説明します。jquery には何千ものサードパーティ プラグインがあり、それを jquery と組み合わせることができます。これには jquery の拡張が必要です。たとえば、以下は Jquery オブジェクトを単純に拡張するデモです。
//sample:扩展jquery对象的方法,bold()用于加粗字体。 (function ($) { $.fn.extend({ "bold": function () { ///<summary> /// 加粗字体 ///</summary> return this.css({ fontWeight: "bold" }); } }); })(jQuery);
メソッドの呼び出し:
これは非常に単純な拡張です。次に、上記のコードを段階的に分析します。
1. jquery のプラグインの仕組み
ユーザーがプラグインを簡単に作成できるように、jquery は jQuery.extend() メソッドと jQuery.fn.extend() メソッドを提供します。
1. jQuery.extend() メソッドにはオーバーロードがあります。
jQuery.extend(object)、1 つのパラメーターは jQuery クラス自体を拡張するために使用され、jQuery クラス/名前空間または静的メソッドに新しい関数を追加するために使用されます。たとえば、jQuery の組み込み ajax メソッドは jQuery を使用します。 .ajax() はこのように呼び出されます。これは、「クラス名.メソッド名」の静的メソッド呼び出しメソッドに似ています。 jQuery.extend(object) の例も書いてみましょう:
//扩展jQuery对象本身 jQuery.extend({ "minValue": function (a, b) { ///<summary> /// 比较两个值,返回最小值 ///</summary> return a < b ? a : b; }, "maxValue": function (a, b) { ///<summary> /// 比较两个值,返回最大值 ///</summary> return a > b ? a : b; } }); //调用 var i = 100; j = 101; var min_v = $.minValue(i, j); // min_v 等于 100 var max_v = $.maxValue(i, j); // max_v 等于 101
オーバーロードされたバージョン: jQuery.extend([deep], target, object1, [objectN])
オブジェクトを 1 つ以上の他のオブジェクトで拡張し、拡張されたオブジェクトを返します。
ターゲットが指定されていない場合は、jQuery 名前空間自体が展開されます。これは、プラグイン作成者が jQuery に新しいメソッドを追加するのに役立ちます。
最初のパラメータが true に設定されている場合、jQuery はディープ コピーを返し、見つかったオブジェクトを再帰的にコピーします。それ以外の場合、コピーは元のオブジェクトと構造を共有します。
未定義のプロパティはコピーされませんが、オブジェクトのプロトタイプから継承されたプロパティはコピーされます。
パラメータ
deep: オプション。 true に設定すると、再帰的にマージされます。
target: 変更されるオブジェクト。
object1: 最初のオブジェクトにマージされるオブジェクト。
objectN: オプション。最初のオブジェクトにマージされるオブジェクト。
例 1:
設定とオプションを結合し、設定を変更して返します。
var settings = { validate: false, limit: 5, name: "foo" }; var options = { validate: true, name: "bar" }; jQuery.extend(settings, options);
結果: <code>结果:<br/>
settings == { validate: true, limit: 5, name: "bar" }
示例2:
合并 defaults 和 options, 不修改 defaults。
var empty = {}; var defaults = { validate: false, limit: 5, name: "foo" }; var options = { validate: true, name: "bar" }; var settings = jQuery.extend(empty, defaults, options); 结果: settings == { validate: true, limit: 5, name: "bar" } empty == { validate: true, limit: 5, name: "bar" }
<br/>这个重载的方法,我们一般用来在编写插件时用自定义插件参数去覆盖插件的默认参数。
//闭包限定命名空间(function ($) { })(window.jQuery);
例 2:
デフォルトを変更せずにデフォルトとオプションを結合します。//闭包限定命名空间(function ($) { $.fn.extend({ "highLight":function(options){ //do something } }); })(window.jQuery);
</p>このオーバーロードされたメソッドは、通常、プラグインを作成するときに、プラグインのデフォルト パラメーターをカスタム プラグイン パラメーターでオーバーライドするために使用されます。
jQuery.fn.extend(object) は、新しいメソッド (通常はプラグインの作成に使用されます) を提供するために jQuery 要素セットを拡張します。
まず、fnとは何かを見てみましょう。 jQuery コードを見ると、見つけるのは難しくありません。
jQuery.fn = jQuery.prototype = {🎜🎜 init: function( selector, context ) {.....};🎜};🎜🎜jQueryのプロトタイプであるオリジナルのjQuery.fn = jQuery.prototype物体。 jQuery.fn.extend() メソッドは、jQuery オブジェクトを拡張するプロトタイプ メソッドです。プロトタイプのメソッドを拡張することは、オブジェクトに「メンバー メソッド」を追加することと同じであることがわかっています。クラスの「メンバー メソッド」は、クラスのオブジェクトによってのみ呼び出すことができるため、 jQuery.fn.extend(オブジェクト)の拡張メソッド、jQueryクラスのインスタンスであるこの「メンバー関数」を利用することができます。 jQuery.fn.extend(object) メソッドと jQuery.extend(object) メソッドは区別する必要があります。 🎜🎜2. 🎜自己実行匿名関数/クロージャ🎜🎜 1. 什么是自执行的匿名函数?
它是指形如这样的函数: (function {// code})();
2. 疑问 为什么(function {// code})();可以被执行, 而function {// code}();却会报错?
3. 分析
(1). 首先, 要清楚两者的区别: (function {// code})是表达式, function {// code}是函数声明.
(2). 其次, js"预编译"的特点: js在"预编译"阶段, 会解释函数声明, 但却会忽略表式.
(3). 当js执行到function() {//code}();时, 由于function() {//code}在"预编译"阶段已经被解释过, js会跳过function(){//code}, 试图去执行();, 故会报错;
当js执行到(function {// code})();时, 由于(function {// code})是表达式, js会去对它求解得到返回值, 由于返回值是一 个函数, 故而遇到();时, 便会被执行.
另外, 函数转换为表达式的方法并不一定要靠分组操作符(),我们还可以用void操作符,~操作符,!操作符……
例如:
bootstrap 框架中的插件写法:
!function($){
//do something;
}(jQuery);
和
(function($){
//do something;
})(jQuery); 是一回事。
匿名函数最大的用途是创建闭包(这是JavaScript语言的特性之一),并且还可以构建命名空间,以减少全局变量的使用。
例如:
var a=1;
(function()(){
var a=100;
})();
alert(a); //弹出 1
更多 闭包和匿名函数 可查看 Javascript的匿名函数与自执行 这篇文章。
三、一步一步封装JQuery插件
接下来我们一起来写个高亮的jqury插件
1.定一个闭包区域,防止插件"污染"
//闭包限定命名空间(function ($) { })(window.jQuery);
2.jQuery.fn.extend(object)扩展jquery 方法,制作插件
//闭包限定命名空间(function ($) { $.fn.extend({ "highLight":function(options){ //do something } }); })(window.jQuery);
//闭包限定命名空间(function ($) { $.fn.extend({ "highLight": function (options) { var opts = $.extend({}, defaluts, options); //使用jQuery.extend 覆盖插件默认参数 this.each(function () { //这里的this 就是 jQuery对象 //遍历所有的要高亮的dom,当调用 highLight()插件的是一个集合的时候。 var $this = $(this); //获取当前dom 的 jQuery对象,这里的this是当前循环的dom //根据参数来设置 dom的样式 $this.css({ backgroundColor: opts.background, color: opts.foreground }); }); } }); //默认参数 var defaluts = { foreground: 'red', background: 'yellow' }; })(window.jQuery);
到这一步,高亮插件基本功能已经具备了。调用代码如下:
$(function () { $("p").highLight(); //调用自定义 高亮插件});
这里只能 直接调用,不能链式调用。我们知道jQuey是可以链式调用的,就是可以在一个jQuery对象上调用多个方法,如:
$('#id').css({marginTop:'100px'}).addAttr("title","测试“);
但是我们上面的插件,就不能这样链式调用了。比如:$("p").highLight().css({marginTop:'100px'}); //将会报找不到css方法,原因在与我的自定义插件在完成功能后,没有将 jQuery对象给返回出来。接下来,return jQuery对象,让我们的插件也支持链式调用。(其实很简单,就是执行完我们插件代码的时候将jQuery对像return 出来,和上面的代码没啥区别)
1 //闭包限定命名空间 2 (function ($) { 3 $.fn.extend({ 4 "highLight": function (options) { 5 var opts = $.extend({}, defaluts, options); //使用jQuery.extend 覆盖插件默认参数 6 return this.each(function () { //这里的this 就是 jQuery对象。这里return 为了支持链式调用 7 //遍历所有的要高亮的dom,当调用 highLight()插件的是一个集合的时候。 8 var $this = $(this); //获取当前dom 的 jQuery对象,这里的this是当前循环的dom 9 //根据参数来设置 dom的样式10 $this.css({11 backgroundColor: opts.background,12 color: opts.foreground13 });14 });15 16 }17 });18 //默认参数19 var defaluts = {20 foreground: 'red',21 background: 'yellow'22 };23 })(window.jQuery);
View Code
4.暴露公共方法 给别人来扩展你的插件(如果有需求的话)
比如的高亮插件有一个format方法来格式话高亮文本,则我们可将它写成公共的,暴露给插件使用者,不同的使用着根据自己的需求来重写该format方法,从而是高亮文本可以呈现不同的格式。
//公共的格式化 方法. 默认是加粗,用户可以通过覆盖该方法达到不同的格式化效果。 $.fn.highLight.format = function (str) { return "<strong>" + str + "</strong>"; }
5.插件私有方法
有些时候,我们的插件需要一些私有方法,不能被外界访问。例如 我们插件里面需要有个方法 来检测用户调用插件时传入的参数是否符合规范。
6.其他的一些设置,如:为你的插件加入元数据插件的支持将使其变得更强大。
完整的高亮插件代码如下:
//闭包限定命名空间(function ($) { $.fn.extend({ "highLight": function (options) { //检测用户传进来的参数是否合法 if (!isValid(options)) return this; var opts = $.extend({}, defaluts, options); //使用jQuery.extend 覆盖插件默认参数 return this.each(function () { //这里的this 就是 jQuery对象。这里return 为了支持链式调用 //遍历所有的要高亮的dom,当调用 highLight()插件的是一个集合的时候。 var $this = $(this); //获取当前dom 的 jQuery对象,这里的this是当前循环的dom //根据参数来设置 dom的样式 $this.css({ backgroundColor: opts.background, color: opts.foreground }); //格式化高亮文本 var markup = $this.html(); markup = $.fn.highLight.format(markup); $this.html(markup); }); } }); //默认参数 var defaluts = { foreground: 'red', background: 'yellow' }; //公共的格式化 方法. 默认是加粗,用户可以通过覆盖该方法达到不同的格式化效果。 $.fn.highLight.format = function (str) { return "<strong>" + str + "</strong>"; } //私有方法,检测参数是否合法 function isValid(options) { return !options || (options && typeof options === "object") ? true : false; } })(window.jQuery);
//调用 //调用者覆盖 插件暴露的共公方法 $.fn.highLight.format = function (txt) { return "<em>" + txt + "</em>" } $(function () { $("p").highLight({ foreground: 'orange', background: '#ccc' }); //调用自定义 高亮插件 });
以上がjQueryプラグイン開発の標準的な書き方の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











jQuery 参照方法の詳細説明: クイック スタート ガイド jQuery は、Web サイト開発で広く使用されている人気のある JavaScript ライブラリであり、JavaScript プログラミングを簡素化し、開発者に豊富な機能を提供します。この記事では、jQuery の参照方法を詳しく紹介し、読者がすぐに使い始めるのに役立つ具体的なコード例を示します。 jQuery の導入 まず、HTML ファイルに jQuery ライブラリを導入する必要があります。 CDN リンクを通じて導入することも、ダウンロードすることもできます

jQueryでPUTリクエストメソッドを使用するにはどうすればよいですか? jQuery で PUT リクエストを送信する方法は、他のタイプのリクエストを送信する方法と似ていますが、いくつかの詳細とパラメータ設定に注意する必要があります。 PUT リクエストは通常、データベース内のデータの更新やサーバー上のファイルの更新など、リソースを更新するために使用されます。以下は、jQuery の PUT リクエスト メソッドを使用した具体的なコード例です。まず、jQuery ライブラリ ファイルが含まれていることを確認してから、$.ajax({u

jQuery は、フロントエンド開発で広く使用されている高速、小型、機能豊富な JavaScript ライブラリです。 2006 年のリリース以来、jQuery は多くの開発者にとって最適なツールの 1 つとなっていますが、実際のアプリケーションでは、いくつかの利点と欠点もあります。この記事では、jQuery の長所と短所を詳しく分析し、具体的なコード例で説明します。利点: 1. 簡潔な構文 jQuery の構文設計は簡潔かつ明確であるため、コードの読みやすさと記述効率が大幅に向上します。例えば、

タイトル: jQuery ヒント: ページ上のすべての a タグのテキストをすばやく変更する Web 開発では、ページ上の要素を変更したり操作したりする必要がよくあります。 jQuery を使用する場合、ページ内のすべての a タグのテキスト コンテンツを一度に変更する必要がある場合があります。これにより、時間と労力を節約できます。以下では、jQuery を使用してページ上のすべての a タグのテキストをすばやく変更する方法と、具体的なコード例を紹介します。まず、jQuery ライブラリ ファイルを導入し、次のコードがページに導入されていることを確認する必要があります: <

タイトル: jQuery を使用して、すべての a タグのテキスト コンテンツを変更します。 jQuery は、DOM 操作を処理するために広く使用されている人気のある JavaScript ライブラリです。 Web 開発では、ページ上のリンク タグ (タグ) のテキスト コンテンツを変更する必要が生じることがよくあります。この記事では、この目標を達成するために jQuery を使用する方法を説明し、具体的なコード例を示します。まず、jQuery ライブラリをページに導入する必要があります。 HTML ファイルに次のコードを追加します。

jQueryで要素の高さ属性を削除するにはどうすればよいですか?フロントエンド開発では、要素の高さ属性を操作する必要が生じることがよくあります。要素の高さを動的に変更する必要がある場合や、要素の高さ属性を削除する必要がある場合があります。この記事では、jQuery を使用して要素の高さ属性を削除する方法と、具体的なコード例を紹介します。 jQuery を使用して高さ属性を操作する前に、まず CSS の高さ属性を理解する必要があります。 height 属性は要素の高さを設定するために使用されます

jQuery は、Web ページでの DOM 操作やイベント処理を処理するために広く使用されている人気のある JavaScript ライブラリです。 jQueryではeq()メソッドを利用して指定したインデックス位置の要素を選択しますが、具体的な使い方と応用シーンは以下の通りです。 jQuery では、 eq() メソッドは、指定されたインデックス位置にある要素を選択します。インデックス位置は 0 からカウントされます。つまり、最初の要素のインデックスは 0、2 番目の要素のインデックスは 1 などとなります。 eq() メソッドの構文は次のとおりです。 $("s

jQuery 要素に特定の属性があるかどうかを確認するにはどうすればよいですか? jQuery を使用して DOM 要素を操作する場合、要素に特定の属性があるかどうかを判断する必要がある状況がよく発生します。この場合、jQuery が提供するメソッドを使用してこの関数を簡単に実装できます。以下では、jQuery 要素が特定の属性を持つかどうかを判断するために一般的に使用される 2 つの方法を紹介し、具体的なコード例を添付します。方法 1: attr() メソッドと typeof 演算子 // を使用して、要素に特定の属性があるかどうかを判断します
