這是怎麼做到的。我用這個SO question作爲參考。
我測試此代碼,它工作正常您例如:
$(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>');
}
};
}
});
它是如何工作
首先,該代碼需要jQuery庫。如果你目前沒有使用它,我強烈推薦它。
代碼首先獲取包含category屬性的輸入div的所有子div。然後,它節省了他們的HTML內容和他們的類別到兩個獨立的陣列(但在相同的位置。
接下來,它會清除掉所有的div輸入DIV下。
最後,經過您的類別順序您在陣列中指定並追加匹配孩子的div以正確的順序。
For循環部分
@eyelidlessness做了解釋for循環的一個很好的工作,但我也將採取重擊在它在這個代碼的背景下,
第一行:
for(i = 0; i < category_sort_order.length; i++) {
意味着,如下(大括號內的一切{代碼})的代碼將被重複許多次。雖然格式看起來過時的(和八九不離十是)它說:
- 創建一個名爲許多變量i並將其設置等於零
- 如果變量小於項目的category_sort_order數組中的號碼,然後在括號中做什麼
- 當方括號結束時,向變量i添加一個(i ++意味着添加一個)
- 然後重複第二步和第三步,直到我終於大於該數組中的類別數。
A.K.A無論在括號內,每個類別都會運行一次。
繼續...對於每個類別,調用另一個循環。這一個:
for(j = 0; j < categories.length; j++) {
循環遍歷我們剛剛從屏幕上刪除的div的所有類別。
在此循環中,if語句檢查屏幕上是否有任何div與當前類別匹配。如果是這樣,他們正在追加,如果沒有循環繼續搜索,直到它通過每一個div。
這真是優雅的拉斯。工作很好。 – 2009-10-21 22:39:53