jQuery 함수 (새로운 jQuery 메소드 또는 플러그인)를 작성하는 방법은 무엇입니까?


203

JavaScript에서 구문은 다음과 같습니다.

function myfunction(param){
  //some code
}

요소에 추가 할 수있는 jQuery에서 함수를 선언하는 방법이 있습니까? 예를 들면 다음과 같습니다.

$('#my_div').myfunction()

6
@RedEyedMonster는 - 그것은 수 많은 감각을. jQuery datepicker와 같은 것을 사용한 적이 있습니까? $('#myDatePickerfield').datePicker();
Jamiec

아니, 난 그것에 대해 경고 주셔서 감사합니다 :)
RedEyedMonster

3
@RedEyedMonster-아마 사용 $("#someElement").hide()했거나 .addClass()...
nnnnnn

@RedEyedMonster : OP는 jQuery 플러그인을 설명하고 있으며 실제로 JavaScript에서 일반적입니다. 참조 docs.jquery.com/Plugins/Authoring
폴 D. 웨이트

답변:


286

로부터 문서 :

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

그런 다음에

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

61
내가 중요하다고 생각한 것을 추가하려면 다음을 추가하십시오. 경고 후. 함수를 체인 가능하게 만듭니다.
Potheek

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

6
이것은 실제로 그 요소에 아무런 영향을 미치지 않기 때문에 이상한 예입니다.
sheriffderek

78

이미받은 모든 답변에도 불구하고 함수에서 jQuery를 사용하기 위해 플러그인을 작성할 필요가 없습니다. 확실히 그것이 단순한 일회성 함수라면 플러그인 작성이 과도하다고 생각합니다. 선택기를 매개 변수로 함수에 전달하면 훨씬 쉽게 수행 할 수 있습니다 . 코드는 다음과 같습니다.

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을 추가하십시오 (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();
});

Parens와 괄호를 닫을 때의 불일치 가이 코드의 유일한 문제라고 생각하지 않습니다. 수정하십시오.
Christoffer Lette

6

extend (jQuery 플러그인을 만드는 방식)를 사용할 수도 있습니다 .

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

    myfunction2: function () 
    {
    }
});

용법:

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

5

다음과 같이 자신의 jQuery 플러그인 (선택한 요소에서 호출 할 수있는 함수)을 작성할 수 있습니다.

(함수 ($) {
    $ .fn.myFunc = 함수 (param1, param2) {
        // this-jquery 객체는 선택된 요소를 보유합니다
    }
}) (jQuery);


나중에 다음과 같이 호출하십시오.

$ ( 'div'). myFunc (1, null);

4

예, jquery를 사용하여 선택한 요소에 적용하는 메소드를 jquery 플러그인이라고 하며 jquery 문서 내 에서 작성하는 데 많은 정보가 있습니다.

jquery 자바 스크립트 일 뿐이므로 "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.