DOM更改后如何更新存储在变量中的jQuery对象?

fms*_*msf 8 javascript jquery dom

我通常将我的jQuery对象存储在变量中,以避免选择器遍布整个地方.

当我更改DOM时,我想让对象自行更新.删除未使用的引用并使用新引用进行更新.我怎样才能做到这一点?理想情况下,我想用以下逻辑做一些事情:

var test = $('div.bar');
console.log(test);
>> [<div class="bar" id="b1"></div>, <div class="bar" id="b2"></div>]

$('#b2').remove();
console.log(test);
>> [<div class="bar" id="b1"></div>, <div class="bar" id="b2"></div>]

test.update();
console.log(test);
>> [<div class="bar" id="b1"></div>]

$('body').append('<div class="bar" id="b3"></div>');
console.log(test);
>> [<div class="bar" id="b1"></div>]

test.update();
console.log(test);
>> [<div class="bar" id="b1"></div>, <div class="bar" id="b3"></div>]
Run Code Online (Sandbox Code Playgroud)

fms*_*msf 7

这个插件解决了这个问题:

(function ( $ ) {
  $.fn.update = function(){
    var newElements = $(this.selector),i;    
    for(i=0;i<newElements.length;i++){
      this[i] = newElements[i];
    }
    for(;i<this.length;i++){
      this[i] = undefined;
    }
    this.length = newElements.length;
    return this;
  };
})(jQuery);
Run Code Online (Sandbox Code Playgroud)

只需将其添加到您的代码中即可:

var $foo = $("div.bar"); // selects all "div.bar"
(... many dom modifications ...)
$foo.update();
Run Code Online (Sandbox Code Playgroud)

  • 我不理解这个问题,既不是原始问题,也不理解你的答案.没有评论的Downvotes很糟糕. (3认同)
  • 对于那些投票结果,任何人都可以解释为什么这是一个更新对象的坏方法?或者我刚刚投票,因为我正在分享你认为不合适的东西?(请注意,stackexchange鼓励在问答风格中分享有用的东西) (2认同)
  • 这是一个很好的问题,并没有伤害任何人.我想你只需要`return $(this.selector)`. (2认同)