有没有办法修改jQuery对象本身?

时间:2015-02-05 11:26:59

标签: javascript jquery

在jquery对象上使用.add.remove等函数时,jQuery对象本身没有被修改,结果会被返回的新jQuery对象捕获。

有没有办法修改对象本身?

我需要这样,所以我可以用引用传递的jQuery编写一个函数,如下所示:

function DoThings(refJQuery) {
    refJQuery.find(...).remove(...);

    if (refJQuery.length > 0) {
        DoThings(refJQuery);
    }
}

重要提示:此代码示例仅提示"通过引用"传递的值的目的/用途。

1 个答案:

答案 0 :(得分:2)

不,jQuery集合被设计为不可变的(你可以更改它们的属性,但你不应该,它们是实现的一部分,而不是API)

当您想要将不可变对象传递给函数并对其进行修改时(假设返回值不可行),组合通常是要走的路。

通常,您应该使用自定义对象。但是如果你愿意,你也可以设计一个通用装饰器:

function MutableJQueryObject(jqo){
  this.jqo = jqo;
}
['add','find','filter',].forEach(function(k){
    MutableJQueryObject.prototype[k] = function(){
      this.jqo = $.fn[k].apply(this.jqo, arguments);
    }
});
['html','remove'].forEach(function(k){
    MutableJQueryObject.prototype[k] = function(){
      return this.jqo[k].apply(this.jqo, arguments);
    }
});
$.fn.mutable = function(){
  return new MutableJQueryObject(this);
}

所以你要构建一个可变对象:

var $e = $('body').mutable();
console.log($e.html()); // html of the body
(function($c){
    $c.find('div'); // change the object
})($e);
console.log($e.html()); // html of the div