2011-11-08 3 views
0

몇 가지 요소에 적용되는 플러그인이 있습니다. JQuery 플러그인 객체를 저장하고 검색 할 수있는 방법이 없으므로 그 객체의 메소드를 실행할 수 있습니다. 샘플 예는 다음과 같습니다.html 요소에서 플러그인 식별

$('#li1').myPlugin(); // apply plugin object to different li 
$('#li2').myPlugin(); // apply plugin object to different li 
$('#li3').myPlugin(); // apply plugin object to different li 

이제 다른 외부 요소의 사용자 활동에서 개체를 검색하여 플러그인의 일부 메소드를 실행하고 싶습니다. highLight 이후

var idx = 2  
$('body').click(function(){ $('li').eq(2).highLight(); }) 

처럼 myPlugin하지만 리튬의 공개 방법이다, 그래서 그것은 실행되지 않습니다.

$(this)[0].obj = this; // sounds weird. 

이 요소와 객체를 저장하는 글로벌 연관 배열을 만드는 이외의 다른 옵션은 무엇입니까, 나는 요소에 속성 (하지만하지 문자열)로 myPlugin 객체를 설정하거나 내가 플러그인 초기화에서이 방법을 수행 할 수 있습니다 이드는 열쇠입니다. 필자의 경우 플러그인 구성 요소에 ID가 있거나 없을 수도 있으므로 이것이 불가능합니다.

편집

이 샘플 플러그인은 실제 여기에 게시 너무 커서입니다. 목표는 외부 활동에 의해 요소와 연관된 플러그인을 식별하는 것입니다. 샘플 예제에서는 body.click을 사용하고 있지만 내 플러그인 내에서 클릭을 구현할 수 없다고 가정합니다. 실제로 이벤트는 플러그인에 알려지지 않은 모든 외부 사용자 정의 이벤트 일 수 있습니다. 나는 분명히 희망한다.

(function ($) { 
    $.fn.myPlugin = function(){ 
     var ele = this; 

     // elr.get(0).extension = this; // can I do this, cross browser? 
     // so that later i can call it as 
     // $('li').eq(1).get(0).extension.highLight() 

     this.highLight = function(){ 
      ele.css('color','red'); 
     } 
     this.blueIt = function(){ 
      ele.css('color','blue'); 
     } 
     this.blueIt(); 
    } 
})(jQuery); 
+1

아마도 플러그인의 일부를 보여줄 수 있습니다. 아마도 메소드 정의 – ManseUK

+0

@ManseUK 문제를 명확히하기 위해 게시했습니다. – hungryMind

답변

1

두 가지 주요 대안은 당신이 필요로하는 무엇에 대한 참조를 저장하기 위해 .data()의 jQuery 방법을 사용하거나 $(sel).pluginName("aMethod", anyData)의 규칙을 사용한다.

나는 후자에 대한 열렬한 팬이 아니지만 일반적입니다.

+0

pluginName이 작동하지 않습니다 (버전 : 1.4.4). 그러나 data()가 정상적으로 작동합니다. 감사. – hungryMind

+0

@ hungryMind ... 이것은 * 당신의 * 플러그인 이름이나이 기술을 사용하는 다른 플러그인을위한 자리 표시 자입니다. [jQuery UI autocomplete] (http://jqueryui.com/demos/autocomplete/)와 같은 "메소드"탭을 참조하십시오. –

+0

아, 나는 그리워. – hungryMind

관련 문제