У меня есть следующий код для сортировки списка, как это с помощью атрибута заказа:Сортировать элементы списка с подкатегориями
<div id="a-categories">
<a href="blabla" order="2" class="leftCats">Cat 2</a>
<a href="blabla" order="1" class="leftCats">Cat 1</a>
<a href="blabla" order="4" class="leftCats">Cat 4</a>
</div>
Код:
var list = document.id('a-categories');
var listGroupObjects = document.getElementsByClassName('leftCats');
var listGroupArray = [];
for (var i = 0; i < listGroupObjects.length; ++i) {
listGroupArray.push(listGroupObjects[i]);
}
listGroupArray.sort(function (a, b) {
return (a.getAttribute('order') - b.getAttribute('order'));
});
for (var i = 0; i < listGroupArray.length; i++) {
list.removeChild(listGroupArray[i]);
}
for (var i = 0; i < listGroupArray.length; i++) {
list.appendChild(listGroupArray[i]);
}
Это работает очень Finde. Но теперь у меня есть это:
<div id="a-categories">
<a href="blabla" order="2" class="leftCats">Cat 2</a>
<a href="blabla" order="1" class="leftCats">Cat 1</a>
<a href="blabla" order="1" parOrder="2" class="leftCats">Cat 2.1</a>
<a href="blabla" order="2" parOrder="2" class="leftCats">Cat 2.2</a>
<a href="blabla" order="4" class="leftCats">Cat 4</a>
</div>
Это как подразделов. Поэтому каждый элемент, имеющий атрибут parOrder, является дочерним. И parOrder дает порядок родительского элемента и его порядок.
Как я могу заказать его, чтобы Childs упорядочивались под родительским элементом. В данном примере это будет: Edit:
<div id="a-categories">
<a href="blabla" order="1" class="leftCats">Cat 1</a>
<a href="blabla" order="2" class="leftCats">Cat 2</a>
<a href="blabla" order="1" parOrder="2" class="leftCats">Cat 2.1</a>
<a href="blabla" order="2" parOrder="2" class="leftCats">Cat 2.2</a>
<a href="blabla" order="4" class="leftCats">Cat 4</a>
</div>
Я не вижу логики того, как вы дошли до этого последнего результата. Почему «порядок = 4» приходит после элементов с подкатегориями? Я думал, что подпункт будет последним, так как вы выставляете их не по порядку в соответствии с их атрибутом 'order'. Я ожидал либо ордера 1, 2, 4, либо 2 с подкатегориями или порядок 1, порядок 1 с подпунктом, порядок 2, порядок 2 с подпунктом, порядок 4. – csmckelvey
Те, которые содержат «parOrder», не принадлежат подкатегорий. Это подкатегории. например order = "1" parOrder = "4" означает, что это подкатегория из элемента с порядком = "4" (который не имеет parOrder), а порядок = "1" говорит, что его первая подкатегория , См. Мое редактирование. – progNewbie
Теперь я вижу, имеет больше смысла. Очень хорошее редактирование. – csmckelvey