2012-12-30 26 views
7

Tôi thường lưu trữ các đối tượng jQuery của mình trong các biến để tránh có bộ chọn được ghi trên tất cả các vị trí.Làm thế nào để cập nhật một đối tượng jQuery được lưu trữ trong một biến sau khi thay đổi DOM?

Khi tôi thay đổi DOM, tôi muốn tự cập nhật đối tượng. Bỏ các tài liệu tham khảo chưa sử dụng và cập nhật các tài liệu mới. Tôi có thể làm cái này như thế nào? Lý tưởng nhất là tôi muốn làm điều gì đó với logic sau:

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

Trả lời

7

This plugin giải quyết vấn đề đó:

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

Chỉ cần thêm nó vào mã của bạn và làm:

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

Để những xuống bỏ phiếu có thể bất cứ ai giải thích tại sao đây là một cách tiếp cận xấu để cập nhật các đối tượng? Hoặc tôi chỉ nhận được bình chọn bởi vì tôi đang chia sẻ một cái gì đó bạn không coi là hữu ích? (lưu ý chia sẻ các công cụ hữu ích trong phong cách Q & A được khuyến khích bởi stackexchange) – fmsf

+3

Tôi không hiểu các downvotes, không phải trên câu hỏi ban đầu cũng không phải trên câu trả lời của bạn. Downvotes mà không có ý kiến ​​sucks. –

+2

Đó là một câu hỏi hay và nó không làm hại ai cả. Tôi nghĩ bạn chỉ cần 'return $ (this.selector)'. – undefined

Các vấn đề liên quan