6

jQuery.live()の適切な代替品は何でしょうか。jQuery.on()が同じことをすることは知っていますが、jQuery.on()の場合は、それを機能させるために親を指定する必要があります。

ページに500のライブがあり、500のライブをすべてオンに変更したいとします。各要素の親を選択して実行するのは現実的ではなく、時間がかかります。

私が持っているとしましょう$(".item").live("click",function(){ alert("test"); });

そして、それをjQuery.on()に置き換えると、次のようになります。$("body").on("click",".item",function(){ alert("test"); });

しかし、私はこのようなこれを達成するためのショートカットの方法や他の何かがあるのだろうか?

$(".item").on("click",function(){ alert("test"); });

数秒ですべてを交換できるように。

4

3 に答える 3

5

.live()死んでいる、長生きしている.live()https ://github.com/jquery/jquery/commit/eed78cc321ed7e2b37fb34e32fbb528b24f61d6e

真剣に、あなたが探しているワンライナーのために、あなたはそれを単に追加することができます:

jQuery.fn.live = function( types, data, fn ) { jQuery( this.context ).on( types, this.selector, data, fn ); return this; }

.live()これをJSの上部に追加して、使用しているjQueryのバージョンを気にせずに、必要に応じて使用できるシムを効果的に作成します。

しかし実際には、他の人が言っているように、選択したテキストエディタまたはsedのようなコマンドラインユーティリティを使用して、find-replaceallを実行する必要があります。私が提供するshimソリューションでは、関数を呼び出して別の関数を呼び出すため、多くのオーバーヘッドが発生し、不要な量のリソースを使用する可能性があります。.on()特に直接呼び出す場合は、はるかに効率的です。


更新.context:上記のソリューションは、jQueryの内部プロパティに依存しています。これはjQuery 1.10以降廃止されており、以降のバージョンでは表示されなくなる可能性があります。ほとんどの場合、ニーズを満たす必要がある代替バージョンは、単に。に置き換えることthis.contextですdocument。これには、.contextプロパティのAPIで概説されている制限があります。

何も指定されていない場合、これはjQueryオブジェクトのデフォルトのコンテキストであるため、このプロパティの値は通常、documentと同じです。たとえば、オブジェクトが<iframe>またはXMLドキュメント内を検索して作成された場合、コンテキストが異なる場合があります。

したがって、失敗する可能性があります。.on()とにかく、今ではあなたは間違いなく直接使用しない言い訳はありません。jQueryの最新バージョンにアップグレードするためのヒントを自由にチェックしてください。

于 2013-03-11T08:08:26.020 に答える
3

liveを呼び出すことで古い関数を提供する小さなプラグインを定義できますonが、これではより悪いコードしか使用できません。正しく使用するには、コードをリファクタリングする必要があります。on

最初の変更をもう少し簡単に管理するのに役立つ解決策は、正規表現を使用して置換を行うことです。ほとんどのテキストエディタはあなたにそれをさせることができます。

あなたが与えるユースケースのために、あなたはこれを使うことができます(JavaScriptの例、あなたのエディターに適応する):

var output = input.replace(
      /\$\(\"([^\"]+)\"\)\.live\(\"([^\"]+)\"/g,
      '$(document.body).on("$2", "$1"'
);

入力:

$(".item").live("click",function(){ alert("test"); });
$(".item2").live("change",function(){ console.log("test"); });

出力:

$(document.body).on("click", ".item",function(){ alert("test"); });
$(document.body).on("change", ".item2",function(){ window.top.console.log("test"); }); 

この最初の変換の後、よりも優れた親要素を探す必要がありますdocument.body

于 2013-03-11T07:40:36.077 に答える
2

ファイルをバックアップした後の@destroyの答え(他に試すべきこと)と同様です

私はKomodoを持っていませんが、Notepad++用に次のものを開発することができました。

探す

\$\("(.+)"\).live\("(.+)",

と置換する

$(document).on('\2', '\1',

正規表現の構文はさまざまであるため、作業が必要になる場合があります。

また、たとえば一重引用符と二重引用符、または空白に対応するために、正規表現のいくつかのバリアントを適応または実行する必要がある場合があります。

于 2013-03-11T08:17:22.947 に答える