2011-04-29 1 views
3

オブジェクト選択したDOMにjQueryプラグインへのアクセスを与えるが、私は彼の文書をint概説パターンに従わないのjQueryのプラグインを書くことを試してい

(function($){ 

$.fn.insert = { 
    'hello': function(text){ 
     $(this).text(text); 
    }, 
    'goodbye': function(){ 
     alert('goodbye'); 
    } 
} 
})(jQuery); 

正しい初期化しますが、おそらく明らかなように、はありません、この形式で

$(document).ready(function(){ 
    $('#test').insert.goodbye(); 
    $('#test').insert.hello('blahblahblah'); 
}); 

:ページが、このコードでこのプラグインをインスタンス化はそうではありません。 firebugのthisを調べると、それに含まれる機能に属するスコープが表示されます。 (キューフェイスパーム)。

「hello」の内部で、選択したDOMオブジェクトにアクセスするにはどうすればよいですか?私は本当になぜ、なぜ、どうやってこのような方法でプラグインを作るべきではないのかについて議論することに興味はありません。それはもっと私にとって学問的なものです。

P.S.私はまた、hello()部分が実行しようとすると、このエラーが発生することに注意してください:doc.createDocumentFragment is not a function

(function($){ 

$.fn.insert = { 
    'el': this, 
    'hello': function(text){ 
     $(this.el).text(text); 
    }, 
    'goodbye': function(){ 
     alert('goodbye'); 
    } 
} 

})(jQuery); 

UPDATEがコードにこの更新プログラムを作りました。 FYI、Firebug の場合、this.elは問題のDOMオブジェクトを参照していますが、まだtextは渡された文字列を保持していますが、まだテキストを要素に挿入していません。

+0

これを実行すると、this.elはグローバルオブジェクト(ウィンドウ) – Homer6

答えて

3

私はわからないんだけど...しかし、これは動作します:

<html> 

    <head> 
     <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.2/jquery.min.js"></script> 
     <script> 

      (function($){ 

       $.fn.myinsert = function(){ 

        this.hello = function(text){ 
         $(this).text(text); 
        }; 

        this.goodbye = function(){ 
         alert('goodbye'); 
        }; 

        return this; //this is the gotcha 

       }; 

      })(jQuery); 

      $(function(){ 
       var test = $('#test'); 
       test.myinsert().goodbye(); 
       test.myinsert().hello('heyo'); 
      }); 

     </script> 
    </head> 

    <body> 

     <div id="test">My name is</div> 

    </body> 

</html> 
+0

を参照します。 'test.myinsert.goodbye();'自体は実際に起動しますので、オブジェクト内からメソッドを呼び出すことができます。 ''el ':this、'、しかし、私はまだ 'hello'メソッドを起動するのに苦労しています。 – dclowd9901

+0

あなたはそのコードをエルと一緒に挿入できますか? – Homer6

+0

質問が編集されました。 – dclowd9901

0

あなたが代わりに選択に呼び出すことができる機能で、jQueryオブジェクトの上に座っオブジェクトとして「挿入」を定義しました。私はあなたが今の選択の範囲をそのように構造化された形で得ることができるとは思わない。 goodbye()は、コンテキスト/スコープに依存しないため、正常に呼び出すことができます。