利用现有的jquery对象而不是创建新的

时间:2012-08-13 07:40:08

标签: jquery css-selectors allocation

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

console.log (source==b);

将返回'false'。

有没有办法让它不分配新的jquery对象,而是修改现有的jquery对象的内容?

我有一个场景,其他对象维护对'source'jquery对象的引用,并希望检查其内容是否已更改。

如果这是不可能的,我想知道什么是“钩”破坏和重新分配的最佳方法,以便其他jquery对象可以被告知新的替换'源'对象在旧的被释放后是什么

想知道这个是否有jquery扩展......

2 个答案:

答案 0 :(得分:2)

几乎所有改变DOM元素集的jQuery方法都会返回一个新的jQuery对象 - 它们不会修改当前的jQuery对象。这就是jQuery由于各种原因而构建的方式。

可以从新的jQuery对象中获取元素并将它们放回旧的jQuery对象中,并在更改元素时触发该对象上的方法,从而维护先前的引用并通知它们更改,但是你必须编写代码才能做到这一点。

例如,虽然这通常打破了jQuery设计的范例,而.end()之类的东西将无法正常工作,但您可以创建一个新方法来设置现有jQuery对象的内容,如下所示: / p>

​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 custom events来监视和通知更改。或者,您可以向jQuery对象添加一个回调列表,只要.set()进行更改,它就会在该jQuery对象上调用。

答案 1 :(得分:0)

如果你真的需要跟踪事件,将变量绑定到源或其他对象的变化等,那么我建议你研究一下像backbone.js或knockout.js这样的MVC框架。

另请参阅:The Top 10 Javascript MVC Frameworks Reviewed