2012-11-13 5 views
0

단일 페이지에서 여러 요소를 호출 할 수있는 간단한 jQuery 플러그인이있다.jQuery 플러그인의 여러 인스턴스 호출하기

필자는 셀렉터를 명시 적으로 선언했지만 플러그인을 호출 한 객체에 상대적이라고 생각합니다. 어떻게해야합니까? , myPlugin 내부

var myPlugin = new MyPlugin(this, options); 

같은 작업을 수행합니다 :

(function($) { 

    var MyPlugin = function(options){ 

     var plugin  = $(this); // The entire myPlugin object 
     var element  = $("div#plugined div#element"); // An element in myPlugin 
     var pluginChild = $(); // Need selector of what plugin was called on + additional slider. ("div#plugined div#child") 

     this.publicFunction = function() { 
      // something... 
     } 

     var privateFunction = function() { 
      // something private... 
     } 
    }; 

    $.fn.myPlugin = function(options) { 

     var defaults = { 
      // options 
     } 

     var options = $.extend(defaults, options); 

     var myPlugin = new MyPlugin(options); 

     $("div#plugined a.arrow").bind('click', function(e){ // Same problem. Need selector of what plugin was called on + additional slider. ("div#plugined div#child") 
      e.preventDefault(); 
      myPlugin.publicFunction(); 
     }); 

     return myPlugin; 
    }; 
})(jQuery); 


<script type="text/javascript"> 
    $(window).load(function() { 
     $('div#plugined').myPlugin(); 
    }); 
</script> 

답변

1

당신은 현재 JQuery와 함께 설정 통과해야

코드에서 thisMyPlugin 인스턴스를 참조하는 것으로
var MyPlugin = function($set, options){ 
    // ... 
    var pluginChild = $set.find(".child"); 

따라서 $(this)에 전화하는 것은별로 의미가 없습니다.

+0

이것은 작동합니다. var element = $ set.child ("div # element")를 선택할 수 있습니다. 그러나 여러 개의 DOM 요소에서 myPlugin을 호출하면 ($ div 'plugins1') myPlugin(); $ ('div # plugined2') myPlugin();) 여전히 서로 간섭하는 것 같습니다. –

+0

@Michael Gruber :'$ .fn' 함수 안에서 셀렉터를 상대적으로 만드셨습니까? 그 외에도 두 개의 클릭 핸들러가 바인딩되고 각각은 자체 인스턴스를 참조합니다. – pimvdb

+0

바인드 함수는? $ ("div # plugined a.arrow"). bind()가 this.children ("a.arrow")입니다. bind() –

1

http://docs.jquery.com/Plugins/Authoring에는이를 수행하는 방법을 설명하는 몇 가지 기본 코드가 있습니다.

이 예를 살펴 유무 :

(function($){ 

    $.fn.tooltip = function(options) { 

    // Create some defaults, extending them with any options that were provided 
    var settings = $.extend({ 
     'location'   : 'top', 
     'background-color' : 'blue' 
    }, options); 

    return this.each(function() {   

     // Tooltip plugin code here 

     $(this) // Will return the selected element 

    }); 

    }; 
})(jQuery); 

당신이 $ (이)에 코드를 실행할 수 있습니다 this.each 루프를, 이것은 당신에게 각 선택된 요소를 제공 할 것입니다.

+1

그리고 이것을 확장하려면'this.each (...)'안에서 인스턴스를 생성하고 나중에 $ (this) .data ('myplugin', myinstance)'를 사용하여 요소에 저장하면됩니다. 플러그인에 대한 향후 호출시'$ (el) .data ('myplugin')'으로 액세스하십시오. –

관련 문제