2012-12-30 17 views
7

Normalde jQuery nesnelerini, her yerde yazıcının seçilmesini önlemek için değişkenler halinde saklarım.DOM değiştikten sonra bir değişkende saklanan jQuery nesnesi nasıl güncellenir?

DOM'ı değiştirdiğimde, nesneyi güncelleştirmeyi kendim yapmak isterim. Kullanılmayan referansları bırakma ve yenileriyle güncelleme. Bunu nasıl yapabilirim? İdeal aşağıdaki mantıkla bir şeyler yapmak istiyorum:

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

Sadece koduna ekleyin ve yapılacak:

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>] 

cevap

7

This plugin bu sorunu çözer oylama aşağı olanlar için

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

can kimse bunun neden nesnenin güncellenmesi için kötü bir yaklaşım olduğunu açıklıyor? Yoksa oy kullanıyorum, çünkü faydalı olduğunu düşündüğünüz bir şeyi paylaşıyorum. (Q & A tarzı yararlı şeyler paylaşımı not stackexchange tarafından teşvik edilir) – fmsf

+3

Ne orijinal soru ne de cevabınızda, downvotes anlamıyorum. Yorumlar olmadan Downvotes berbat. –

+2

Bu iyi bir soru ve kimseyi incitmiyor. Bence sadece "return $ (this.selector)' a ihtiyacın var. – undefined

İlgili konular