Вот как это сделать. Я использовал этот SO вопрос в качестве ссылки.
Я протестировал этот код, и он работает правильно для вашего примера:
$(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. Если вы в настоящее время не используете его, я настоятельно рекомендую его.
Код начинается с получения всех дочерних элементов div входного элемента, содержащих атрибут категории. Затем он сохраняет их HTML-контент и свою категорию в двух отдельных массивах (но в одном месте.
Затем он очищает все div'ы под входным div.
Наконец, он просматривает ваши категории в порядке, указанном в массиве, и добавляет соответствующие дочерние элементы div в правильном порядке.
Секция For loop
@ eyelidlessness хорошо объясняет циклы, но я тоже попробую. в контексте этого кода.
Первая строка:
for(i = 0; i < category_sort_order.length; i++) {
Означает, что следующий код (все в фигурных скобках {code}) будет повторяться несколько раз. Хотя формат выглядит архаичным (и как-то так), он говорит:
- Создайте числовую переменную с именем i и установите ее равной нулю
- Если эта переменная меньше, чем количество элементов в массиве category_sort_order, то делать то, что в скобках
- Когда скобки заканчиваются, добавьте один к переменной i (i ++ означает добавить один)
- Затем он повторяет шаги два и три, пока, наконец, я не станет больше, чем количество категорий в этом массиве.
A.K.A Все, что в скобках, будет выполнено один раз для каждой категории.
Двигаясь дальше ... для каждой категории вызывается еще один цикл. Вот этот:
for(j = 0; j < categories.length; j++) {
перебирает все категории div, которые мы только что удалили с экрана.
В этом цикле оператор if проверяет, соответствует ли какой-либо элемент div с экрана текущей категории. Если это так, они добавляются, если нет, цикл продолжает поиск до тех пор, пока не пройдет через каждый div.