0
source = $("div");
b = source.filter("div");

console.log (source==b);

'false'を返します。

新しいjqueryオブジェクトを割り当てずに、既存のオブジェクトのコンテンツを変更する方法はありますか?

他のオブジェクトが「ソース」jqueryオブジェクトへの参照を維持し、その内容が変更されているかどうかを確認したいというシナリオがあります。

これが不可能な場合は、破棄と再割り当てを「フック」して、古いオブジェクトが解放された後に他のjqueryオブジェクトに新しい置換「ソース」オブジェクトが何であるかを通知できるようにするための最良の方法は何でしょうか。

このためのjquery拡張機能があるかどうか疑問に思っています...

4

2 に答える 2

2

DOM要素のセットを変更するほぼすべてのjQueryメソッドは、新しいjQueryオブジェクトを返します。現在のjQueryオブジェクトは変更しません。これが、さまざまな理由でjQueryが設計されている方法です。

新しいjQueryオブジェクトから要素を取得し、それらを古いjQueryオブジェクトに戻し、要素を変更したときにそのオブジェクトのメソッドをトリガーすることで、以前の参照を維持し、変更を通知することができますが、 dはそれを行うためのコードを書かなければなりません。

たとえば、これは一般にjQueryが設計されているパラダイムを破り、次のようなもの.end()は適切に機能しなくなりますが、次のように既存のjQueryオブジェクトのコンテンツを設定するための新しいメソッドを作成できます。

​jQuery.fn.set = function(elems) {
    this.length = elems.length;
    for (var i = 0; i < elems.length; i++) {
        this[i] = elems[i];
    }
}​

これにより、これを行うことができます。

var source = $("div");
var b = source.filter("div");
source.set(b);

この変更の通知を作成する場合は、jQueryカスタムイベントを使用して変更を監視および通知できます。または、変更が加えられるたびにそのjQueryオブジェクトで呼び出されるコールバックリストをjQueryオブジェクトに追加することもできます.set()

于 2012-08-13T07:41:53.800 に答える
0

イベントを追跡したり、ソースや他のオブジェクトの変更に変数をバインドしたりする必要がある場合は、backbone.jsやknockout.jsなどのMVCフレームワークを調べることをお勧めします。

参照:レビューされたトップ10のJavascriptMVCフレームワーク

于 2012-08-13T07:48:49.790 に答える