CSS选择器只针对直接子元素,而不针对其他相同后代元素。

12 浏览
0 Comments

CSS选择器只针对直接子元素,而不针对其他相同后代元素。

我有一个嵌套可排序的列表,可以动态添加或删除项目,并且可以嵌套n级深。在嵌套时,会将一个新的ul元素注入到选定为父级的li元素中。列表的初始状态如下所示:

我正在使用MooTools进行排序等操作,它运行良好,但我在重置排序时遇到了问题。我尝试使用的每个CSS选择器也包括所有子元素,而不仅仅是属于列表而不属于子列表的li元素。是否有一种选择器可以仅获取直接子元素?是否还有其他方法可以做到这一点?

我尝试了一些类似上述的子选择器:

  • ul > li 将选择所有作为ul的子元素的li元素,而不仅仅是直接子元素
  • #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++;

});

}

0