2012-12-30 7 views
7

私は通常、セレクタをあちこちに書くことを避けるために、変数に自分の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>] 

答えて

7

This pluginは、その問題を解決:

(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); 

ちょうどあなたのコードに追加して実行します。

var $foo = $("div.bar"); // selects all "div.bar" 
(... many dom modifications ...) 
$foo.update(); 
+2

投票ができますダウンしたものになぜこれがオブジェクトを更新するための悪いアプローチであるのか誰にも説明できますか?それとも、あなたが役に立たないと思っていることを共有しているので投票しただけですか? (Q&Aスタイルで有益な情報を共有することはstackexchangeによって奨励されています) – fmsf

+3

私は下降音を理解していません。元の質問やあなたの答えには分かりません。コメントのない下落は嫌です。 –

+2

それは良い質問であり、誰も傷つけることはありません。私は 'return $(this.selector)'だけが必要だと思います。 – undefined

関連する問題