すでに質問されている場合はお詫び申し上げますが、どこにも答えが見つかりませんでした。
基本的なプラグインシェルを作成しました。
ここにコードがあります。
http://codepen.io/anon/pen/dlhjL
私の質問は、なぜこれをjQuery内で各関数内で再度ラップする必要があるのかということです。
メソッドを初期化したとき、これはすでにjQuery内にラップされています(例:$('p')。myPlugin();
これを回避する方法はありますか?
B
すでに質問されている場合はお詫び申し上げますが、どこにも答えが見つかりませんでした。
基本的なプラグインシェルを作成しました。
ここにコードがあります。
http://codepen.io/anon/pen/dlhjL
私の質問は、なぜこれをjQuery内で各関数内で再度ラップする必要があるのかということです。
メソッドを初期化したとき、これはすでにjQuery内にラップされています(例:$('p')。myPlugin();
これを回避する方法はありますか?
B
.each()
コールバックにプレーンなDOM要素のみを提供します。したがって、.each()
コールバック内でjQueryオブジェクトを使用する場合、yuoは渡されたDOM要素からオブジェクトを作成する必要があります。
プラグイン自体this
はホストjQueryオブジェクトとして開始するため、実行できますが、ホストjQueryオブジェクトthis.each()
内の各DOM要素を反復処理するときに、コールバック内の連続する各DOM要素に.each()
変更されます。this
ここにいくつかの注釈があります:
(function($) {
$.fn.myPlugin = function() {
// "this" here is the incoming jQuery object and thus
// you can call this.each() to iterate each item in the jQuery object
return this.each(function() {
// "this" here is each successive DOM object in the jQuery object
// because of how .each() works.
// If you want to be able to use a jQuery object here, you have
// to create one as this code does
$(this).css('background', 'red');
});
};
}(jQuery));
この特定のケースでは、jQueryオブジェクト内のすべてのDOM要素に対して反復が行われる.each()
ため、実際には必要ありません。.css()
あなたはこれを行うことができます:
jQuery.fn.myPlugin = function() {
return this.css('background', 'red');
}
ラップされるのはすべての段落要素ですが、.each
コールバック内では、すべての要素を同時に操作することは意味がありません。
通常、繰り返される要素をjQueryifyする必要はありません。この場合、次のように記述できます。
return this.css("background-color", "red");