这是如何做到的。我使用这个
SO问题作为参考。
我测试了这个代码,对于你的示例它运行良好。
$(document).ready(function() {
var categories = new Array();
var content = new Array();
$('#input > [category]').each(function(i) {
categories[i] = $(this).attr('category');
content[i] = $(this).html();
});
$('#input').empty();
var category_sort_order = ['any', 'product', 'download'];
for(i = 0; i < category_sort_order.length; i++) {
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库。如果您目前没有使用它,我强烈建议您使用。
代码开始通过获取包含类别属性的输入div的所有子div来运行。然后将它们的HTML内容和它们的类别保存到两个单独的数组中(但在同一位置)。
接下来,清除输入div下的所有div。
最后,按照您在数组中指定的顺序遍历您的类别,并按正确的顺序附加匹配的子div。
For循环部分
@eyelidlessness很好地解释了for循环,但是我也会在这段代码的上下文中尝试解释它。
第一行:
for(i = 0; i < category_sort_order.length; i++) {
意味着接下来的代码(花括号中的所有内容)将被重复执行许多次。尽管格式看起来有点古老(并且确实是这样),但它表示:
- 创建一个名为i的数字变量,并将其设置为零
- 如果该变量小于category_sort_order数组中的项目数,则执行花括号中的内容
- 当花括号完成后,将变量i加1(i ++表示加1)
- 然后它重复步骤二和三,直到i最终大于该数组中的分类数。
即每个类别中花括号内的内容都将运行一次。
接下来...对于每个类别,调用了另一个循环。 这个循环:
for(j = 0
循环遍历我们刚从屏幕中删除的所有div类别。
在此循环中,if语句检查屏幕上是否有任何div与当前类别匹配。 如果是,则将它们添加,如果不是则继续搜索直到遍历完每个div。
Array
的数字键。一个for
循环(通常)以其第一条语句作为初始键,第二条语句作为最终键,并以最终语句指示从初始键移动到最终键(通常为i++
或i--
)。 - eyelidlessness