jquery

2010-12-22 27 views
8

đoạn mã sau hoạt động hiệu quả hơn, nhưng nó làm cho trình duyệt trở nên khó khăn một chút. Không có gì lớn. Tôi tự hỏi liệu có cách nào để làm cho điều này hiệu quả hơn không? Tôi có thể sử dụng bộ nhớ đệm hoặc bằng cách nào đó cư trú một lựa chọn và sau đó chỉ cần sao chép nó vào khác 5. (có 6 thả xuống với một lớp 'mặt nạ' trên trang.)jquery

Bất kỳ trợ giúp sẽ được đánh giá rất nhiều!

$('.mask').each(function() { 
    $(this).append($('<option/>').val("").text("")); 
    for (var i = 1; i < 256; i++) { 
     $(this).append($('<option/>').val(i).text(i)); 
    } 
    }); 
}); 

Trả lời

12

Bạn có thể tạo các nút một lần sau đó sao chép chúng, như thế này:

var temp = $('<select/>'); 
$('<option/>').val("").text("").appendTo(temp); 
for (var i = 1; i < 256; i++) { 
    $('<option/>').val(i).text(i).appendTo(temp); 
} 
temp.children().clone().appendTo('.mask'); 

Thay vì làm rất nhiều cá nhân gắn thêm vào DOM (mà là rất tốn kém) này lô tất cả các yếu tố lên trong một đoạn tài liệu sau đó nhân bản chúng, chắp thêm theo lô (một lô cho mỗi lựa chọn).

+0

Ai đó có thể giải thích lý do tại sao điều này được ưu tiên mặc dù nó không nhanh như giải pháp trên? –

+0

@Kyle - việc sử dụng DOM của các nút của bạn an toàn hơn, ví dụ như báo giá trong giá trị, v.v. (sẽ an toàn trong * trường hợp cụ thể này) sẽ gây ra vấn đề, HTML không hợp lệ và hiển thị không thể đoán trước. Để an toàn, hãy gắn bó với các phương thức tạo DOM, không phải HTML thông qua tạo chuỗi. –

6

Nó nhanh hơn nhiều (khoảng 3-10 lần, như thử nghiệm here) để xây dựng HTML mình trong một chuỗi duy nhất:

var html = "<option value=''></option>"; 
for (var i = 1; i < 256; i++) { 
    html += "<option value='" + i + "'>" + i + "</option>"; 
} 
$(".mask").append(html); 

Xem kiểm tra hiệu suất so sánh các tùy chọn hiện tại trong luồng này: http://jsperf.com/appending-options-jquery

+0

Đây rõ ràng là giải pháp nhanh hơn, nhưng nó dường như không phải là những gì mọi người thích sử dụng? Ai đó có thể giải thích tại sao điều này không tốt bằng giải pháp dưới đây? –