2012-12-30 66 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

對那些反對投票可以任何人都可以解釋爲什麼這是更新對象的錯誤方法?或者我只是被拒絕投票,因爲我分享了一些你認爲沒有用的東西? (注意在問答風格中分享有用的東西被stackexchange鼓勵) – fmsf

+3

我不理解downvotes,既不是原始問題,也不是你的答案。沒有評論的Downvotes很爛。 –

+2

這是一個很好的問題,它不會傷害任何人。我想你只需要'返回$(this.selector)'。 – undefined

相關問題