Đây là cách thực hiện. Tôi đã sử dụng số này SO question làm tham chiếu.
Tôi đã thử nghiệm mã này và nó hoạt động đúng cách ví dụ của bạn:
$(document).ready(function() {
var categories = new Array();
var content = new Array();
//Get Divs
$('#input > [category]').each(function(i) {
//Add to local array
categories[i] = $(this).attr('category');
content[i] = $(this).html();
});
$('#input').empty();
//Sort Divs
var category_sort_order = ['any', 'product', 'download'];
for(i = 0; i < category_sort_order.length; i++) {
//Grab all divs in this category and add them back to the form
for(j = 0; j < categories.length; j++) {
if(categories[j] == category_sort_order[i]) {
$('#input').append('<div category="' +
category_sort_order[i] + '">'
+ content[j] + '</div>');
}
};
}
});
Làm thế nào nó hoạt động
Trước hết, mã này đòi hỏi các thư viện JQuery. Nếu bạn hiện không sử dụng nó, tôi khuyên bạn nên sử dụng nó.
Mã bắt đầu bằng cách nhận tất cả các div con của div đầu vào chứa thuộc tính danh mục. Sau đó, nó giúp tiết kiệm nội dung html của họ và loại họ để hai mảng riêng biệt (nhưng trong cùng một vị trí.
Tiếp theo nó gạt bỏ tất cả các divs dưới div input.
Cuối cùng, nó đi qua danh mục của bạn theo thứ tự bạn chỉ định trong mảng và gắn thêm các divs hợp đứa trẻ theo đúng thứ tự.
các đối với phần vòng lặp
@eyelidlessness làm một công việc tốt trong việc giải thích cho các vòng, nhưng tôi cũng sẽ tham gia một Whack tại trong ngữ cảnh của mã này.
Dòng đầu tiên:
for(i = 0; i < category_sort_order.length; i++) {
Nghĩa là mã mà sau (tất cả mọi thứ trong cặp ngoặc nhọn {code}) sẽ được lặp đi lặp lại một số lần.Mặc dù định dạng trông cổ xưa (và sorta là) nó nói:
- Tạo một biến số gọi tôi và đặt nó bằng không
- Nếu biến đó là ít hơn số lượng các mục trong mảng category_sort_order, sau đó làm những gì trong ngoặc đơn
- Khi dấu ngoặc kết thúc, thêm một vào biến i (i ++ có nghĩa là thêm một)
- Sau đó nó lặp lại bước hai và ba cho đến khi cuối cùng tôi lớn hơn số hạng mục trong mảng đó.
A.K Mọi thứ trong ngoặc đơn sẽ được chạy một lần cho mọi danh mục.
Di chuyển ... cho mỗi danh mục, một vòng lặp khác được gọi. Điều này:
for(j = 0; j < categories.length; j++) {
lặp qua tất cả các loại div mà chúng tôi vừa xóa khỏi màn hình.
Trong vòng lặp này, câu lệnh if sẽ kiểm tra xem có bất kỳ div nào từ màn hình khớp với danh mục hiện tại hay không. Nếu vậy, chúng được thêm vào, nếu không phải vòng lặp tiếp tục tìm kiếm cho đến khi nó đi qua mọi div.
Điều này thực sự là thanh lịch Russ. Công việc tốt đẹp. –