jQuery関数(新しいjQueryメソッドまたはプラグイン)を作成する方法


203

JavaScriptの構文は次のとおりです。

function myfunction(param){
  //some code
}

要素に追加できるjQueryで関数を宣言する方法はありますか?例えば:

$('#my_div').myfunction()

6
@RedEyedMonster-それは十分に理にかなっています。jQuery datepickerのようなものを使用したことがありますか?$('#myDatePickerfield').datePicker();
Jamiec

いいえ、私はそれを
知らせ

3
@RedEyedMonster-おそらく使用した$("#someElement").hide().addClass()...
nnnnnn

@RedEyedMonster:OPはjQueryプラグインを記述しています。これは実際にはJavaScriptでかなり一般的です。docs.jquery.com/Plugins/Authoringを
Paul D. Waite

回答:


286

ドキュメントから:

(function( $ ){
   $.fn.myfunction = function() {
      alert('hello world');
      return this;
   }; 
})( jQuery );

その後、あなたはします

$('#my_div').myfunction();

61
私が重要だと思ったものを追加するだけです。追加してください-これを返します。アラート後。関数を連鎖可能にします。
Potheek 2013

2
ここに多くの正解があります。jQuery-Docuは違いを示しています:learn.jquery.com/plugins/basic-plugin-creation
Andy Tschiersch

@candideの時点$('my_div').myfunction(); で電話
Nikhil G

2
@NikhilG $( 'my_div')はタグを参照し<my_div></my_div>ます。idを参照するには、ハッシュ記号が必要my_divです。
Candide 2015年

6
これは、その要素に対して実際には何も影響を及ぼさないため、奇妙な例です。
sheriffderek

78

すでに受け取ったすべての回答にもかかわらず、jQueryを関数で使用するためにプラグインを作成する必要がないことは注目に値します。確かに、それが単純な1回限りの関数であれば、プラグインを作成するのはやり過ぎだと思います。セレクターをパラメーターとして関数に渡すだけではるかに簡単に行うことができます。コードは次のようになります。

function myFunction($param) {
   $param.hide();  // or whatever you want to do
   ...
}

myFunction($('#my_div'));

$変数名の$paramは必須ではないことに注意してください。その変数にjQueryセレクターが含まれていることを覚えやすくするのは、私の習慣です。そのまま使用することもできparamます。


41

そこにはたくさんのドキュメント/チュートリアルがありますが、あなたの質問に対する簡単な答えはこれです:

// to create a jQuery function, you basically just extend the jQuery prototype
// (using the fn alias)

$.fn.myfunction = function () {
    // blah
};

その関数内では、this変数は関数を呼び出したjQueryラップセットに対応します。したがって、次のようなもの:

$.fn.myfunction = function () {
    console.log(this.length);
};

$('.foo').myfunction();

...クラスを持つ要素の数をコンソールにフラッシュしfooます。

もちろん、セマンティクスにはそれだけではありません(ベストプラクティスなどすべてのジャズと同様)。そのため、必ず読んでください。


14

関数をjQueryオブジェクトで使用できるようにするには、次のように関数をjQueryプロトタイプ(fnはjQueryのプロトタイプのショートカットです)に追加します。

jQuery.fn.myFunction = function() {
    // Usually iterate over the items and return for chainability
    // 'this' is the elements returns by the selector
    return this.each(function() { 
         // do something to each item matching the selector
    }
}

これは通常jQueryプラグインと呼ばれます

-http://jsfiddle.net/VwPrm/


8

うん—あなたが説明しているのはjQueryプラグインです。

jQueryプラグインを作成するには、JavaScriptで関数を作成し、それをオブジェクトのプロパティに割り当てますjQuery.fn

例えば

jQuery.fn.myfunction = function(param) {
    // Some code
}

プラグイン関数内で、thisキーワードはプラグインが呼び出されたjQueryオブジェクトに設定されます。だから、あなたがするとき:

$('#my_div').myfunction()

次に、thisinside myfunctionはによって返されるjQueryオブジェクトに設定され$('#my_div')ます。

詳細については、http://docs.jquery.com/Plugins/Authoringを参照してください。


8
$(function () {
    //declare function 
    $.fn.myfunction = function () {
        return true;
    };
});

$(document).ready(function () {
    //call function
    $("#my_div").myfunction();
});

括弧と中括弧を閉じる際の不一致がこのコードの唯一の問題だとは思いません。修正してください。
Christoffer Lette、2012

6

あなたはまた、拡張を使用することができます(jQueryプラグインの作成方法)をます。

$.fn.extend(
{
    myfunction: function () 
    {
    },

    myfunction2: function () 
    {
    }
});

使用法:

$('#my_div').myfunction();

5

以下のように、独自のjQueryプラグイン(選択した要素で呼び出すことができる関数)を記述できます。

(関数($){
    $ .fn.myFunc = function(param1、param2){
        // this-jqueryオブジェクトは選択した要素を保持します
    }
})(jQuery);


後でそれを呼び出す:

$( 'div')。myFunc(1、null);

4

はい、jqueryを使用して選択した要素に適用するメソッドはjqueryプラグインと呼ばれ、jqueryドキュメント内にオーサリングに関する十分な情報があります。

jquery 単なるJavaScriptなので、「jqueryメソッド」について特別なことは何もないことに注意してください。


1
「「jqueryメソッド」について特別なことは何もない」 -はい、あります。「jQueryメソッド」はjQueryオブジェクトで機能します。(しかし、はい、jQuery 単なるJSです...)
nnnnnn

3

「colorize」メソッドを作成します。

$.fn.colorize = function custom_colorize(some_color) {
    this.css('color', some_color);
    return this;
}

これを使って:

$('#my_div').colorize('green');

このシンプルな例は、jQueryドキュメントの「基本的なプラグインを作成する方法」のベストと、@ Candide@ Michaelからの回答を組み合わせたものです


3

あなたはいつでもこれを行うことができます:

jQuery.fn.extend({
   myfunction: function(param){
       // code here
   },
});
OR
jQuery.extend({
   myfunction: function(param){
       // code here
   },
});
$(element).myfunction(param);

2

プロトタイプ(jQueryプラグインを作成する)を介してjQueryオブジェクトを拡張したいようです。これは、jQuery関数($(selector/DOM element))の呼び出しを通じて作成されたすべての新しいオブジェクトがこのメソッドを持つことを意味します。

これは非常に簡単な例です:

$.fn.myFunction = function () {
    alert('it works');
};

デモ


1

jQueryで関数を作成する最も簡単な例は

jQuery.fn.extend({
    exists: function() { return this.length }
});

if($(selector).exists()){/*do something here*/}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.