点击除最后一个孩子之外的任何<li><a>....</a></li>
元素,此元素应作为<ul>
的第一个孩子移至顶部。
描述
默认:
<ul>
<li><a href="#">01</a></li>
<li><a href="#">02</a></li>
<li><a href="#">03</a></li>
<li><a href="#">04</a></li>
<li><a href="#">05</a></li>
<li><a href="#">06 (Last Child)</a></li>
</ul>
如果我点击03
,此列表应如下所示..
<ul>
<li><a href="#">03</a></li>
<li><a href="#">01</a></li>
<li><a href="#">02</a></li>
<li><a href="#">04</a></li>
<li><a href="#">05</a></li>
<li><a href="#">06 (Last Child)</a></li>
</ul>
但如果单击最后一个孩子<li>
,则不应移动或更改此元素...最后一个孩子应始终保持最后一个。
答案 0 :(得分:5)
除了使用$('li:not(:last)')
元素选择器的最后一个元素之外,您可以为li元素设置click事件。然后使用prependTo作为第一个孩子附加到父母:
$('li:not(:last)').click(function(){
$(this).prependTo($(this).parent());
});
<强> Working Demo 强>
更新:针对多个UL元素的解决方案
如果有多个UL元素,则需要使用:last-child
而不是:last
。由于:last
定位匹配集中的最后一个元素,而:last-child
将定位所有li是最后一个孩子。
答案 1 :(得分:2)
您可以使用:not(:last)
过滤器和jQuery prependTo
:
$('li a:not(:last)').click(function() {
$li = $(this).parent('li');
$li.prependTo($li.parent('ul'));
return false;
})
答案 2 :(得分:1)
检查此更新的JSFiddle
这符合建议。只需将jquery
添加到您的代码