这是怎么做到的。我用这个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