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

console.log (source==b);

将返回“假”。

有没有办法让它不分配新的 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

如果您确实需要跟踪事件、将变量绑定到源或其他对象的更改等,那么我建议您研究 MVC 框架,如backbone.js 或 knockout.js。

另请参阅:审查的 10 大 Javascript MVC 框架

于 2012-08-13T07:48:49.790 回答