У меня есть вложенный сортируемый список, в который можно динамически добавлять или удалять элементы, а также иметь n-уровень глубины. При вложении новый элемент ul внедряется в любой элемент li, выбранный в качестве родительского. Начальное состояние списка выглядит примерно так:
<ul id="parent">
<li id="One"><a href="" class="listLink"><span class="position">1</span>One</a></li>
<li id="Two"><a href="" class="listLink"><span class="position">2</span>Two</a></li>
<li id="Three"><a href="" class="listLink"><span class="position">3</span>Three</a>
<ul>
<li id="A"><a href="" class="listLink"><span class="position">1</span>A</a></li>
<li id="B"><a href="" class="listLink"><span class="position">2</span>B</a></li>
<li id="C"><a href="" class="listLink"><span class="position">3</span>C</a></li>
<li id="D"><a href="" class="listLink"><span class="position">4</span>D</a></li>
<li id="E"><a href="" class="listLink"><span class="position">5</span>E</a></li>
<li id="F"><a href="" class="listLink"><span class="position">6</span>F</a></li>
</ul>
</li>
<li id="Four"><a href="" class="listLink"><span class="position">4</span>Four</a></li>
<li id="Five"><a href="" class="listLink"><span class="position">5</span>Five</a></li>
<li id="Six"><a href="" class="listLink"><span class="position">6</span>Six</a></li>
</ul>
Я использую MooTools для выполнения сортировки и т. Д., И она работает нормально, но у меня возникают проблемы с корректным сбросом текста позиции при сортировке. Каждый селектор CSS, который я пытаюсь использовать, также включает в себя все дочерних элементов, а не только элементы li, которые принадлежат списку, а не какие-либо принадлежащие подспискам. Предположим, что кроме id, position и text каждый элемент li во всех списках идентичен всем остальным. Есть ли селектор для получения только ближайших детей? Есть ли другой способ сделать это?
Я пробовал некоторые дочерние селекторы, подобные упомянутым:
ul > li
Выберет все li элементы, которые являются дочерними элементами ul, а не только непосредственными дочерними элементами
#parent > li
Действует так же, как указано выше.
Вот функция, которую я в данный момент выполняю при отбрасывании элемента, которая не обрабатывает сортировку, работает нормально, просто обновляя позицию. Обратите внимание, что это также синтаксис MooTools:
var drop = function(el){
el.getParents('ul').reverse().each(function(item){
var posCount = 1;
item.getElements('li a span[class=position]').each(function(pos){
pos.set('text', posCount);
posCount++;
});
});
}
В настоящее время изменение порядка предметов на основном уровне перенумеровывает все 1-12, даже подсписки. Изменение любого элемента в подсписке даст правильные номера для этого списка, но заставит родительские списки неправильно подсчитать все дочерние элементы li в нумерации.
Я чувствую, что это уродливый хак, но он работает:
var drop = function(){
var ulCount = 1;
$$('ul').each(function(item){
if(item.get('id') != 'parent') {
item.set('id', 'id-'+ulCount);
}
var elId = item.get('id');
var posCount = 1;
$(document).getElements('#'+elId+'>li>a>span[class=position]').each(function(pos){
pos.set('text', posCount);
posCount++;
});
ulCount++;
});
}