$.fn.someFunction = function()
で新しいjQuery関数を追加できることを知っています
ただし、特定の要素にのみ機能を追加したいです。私はこの構文を試しましたが、機能しません$('.someElements').fn.someFunction = function()
これを行いたいので、コードのどこかでこのような関数を呼び出すことができます$('someElements').someFunction();
.bind()
および .trigger()
を使用します
$('button').bind('someFunction',function() {
alert('go away!')
});
$('button').click(function(){
$(this).trigger('someFunction');
});
JQuery 1.7以降、 。on() メソッドは、イベントハンドラーをドキュメントにアタッチするための推奨メソッドです。
あなたはこれで上記を行うことができます:
$.fn.testFn = function(){
this.each(function(){
var className = $(this).attr('class');
$(this).html(className);
});
};
$('li').testFn(); //or any element you want
ヨは、同じことをする必要がありましたが、これを思いつきました。その素敵な原因は、要素を破壊し、機能が馬鹿になります!おもう...
var snippet=jQuery(".myElement");
snippet.data('destructor', function(){
//do something
});
snippet.data('destructor')();
@Reigelの答えは素晴らしいです!ただし、$.fn
構文を使用して、関数に特定の要素のみを処理させることもできます。
$.fn.someFunction = function(){
this.each(function(){
// only handle "someElement"
if (false == $(this).hasClass("someElement")) {
return; // do nothing
}
$(this).append(" some element has been modified");
return $(this); // support chaining
});
};
// now you can call your function like this
$('.someElement').someFunction();
作業jsfiddleを参照してください: http://jsfiddle.net/AKnKj/3/
特定のセレクターに対してのみこの関数が必要な場合は、次の方法が有効です。私はこれを必要とするシナリオを持っていて、うまく機能します。
$('.my-selector').each(function(){
$(this).init.prototype.getUrl = function(){
// do things
};
})
その後、あなたがすることができます
$('.my-selector').getUrl()
プラグインとして定義したり、データやバインド/オン/トリガーイベントを使用したりする必要はありません。
this
を返すことでチェーンで使用したい場合は、含まれているオブジェクトを返すように関数を変更できます。
$('.my-selector').each(function(){
$(this).init.prototype.getUrl = function(){
// do things
return this;
};
})
実際にこのユースケースもありましたが、キャッシュされたオブジェクトを使用していました。そのため、jQueryオブジェクト、トグル可能なメニューが既にあり、そのオブジェクトに「開く」と「閉じる」という2つの関数を追加したかったのです。関数は要素自体のスコープを保持する必要があり、それがそれだったので、this
をメニューオブジェクトにしたかったのです。とにかく、他のjavascriptオブジェクトと同じように、関数と変数を自由に追加することができます。時々それを忘れます。
var $menu = $('#menu');
$menu.open = function(){
this.css('left', 0);
this.is_open = true; // you can also set arbitrary values on the object
};
$menu.close = function(){
this.css('left', '-100%');
this.is_open = false;
};
$menu.close();
最も明らかな解決策は、関数をオブジェクトのプロパティとして割り当てることです。
obj.prop("myFunc", function() {
return (function(arg) {
alert("It works! " + arg);
});
});
次に、オブジェクトで次のように呼び出します。
obj.prop("myFunc")("Cool!");
注:あなたの関数は外側の関数の戻り値です: http://api.jquery.com/prop/#prop-propertyName-function を参照してください
また、これがあなたに役立つかどうかは私の答えではわかりませんが、.liveを使用してみてください。
$(selector).live(click,function(){
//some codes here
});