我有一个嵌套的可排序列表,它可以动态地添加或删除项目,并且可以嵌套到n层深.在嵌套时,新的ul元素被注入到 Select 作为父元素的任何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进行排序,等等,它工作得很好,但我在正确重置排序上的位置文本时遇到了问题.我try 使用的每个CSS Select 器还包括all个子元素,而不仅仅是属于列表的li元素,而不是属于子列表的元素.假设除了id、position和text之外,所有列表中的每个li元素都与所有其他元素相同.有没有只有直系子女的 Select 器?有没有其他方法可以做到这一点?
我try 了一些 children Select 器,比如上面提到的:
-
ul > li
将 Select all个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++;
});
}