我们有:
<ul>
<li>...</li>
<li>...</li>
<li>...</li>
<li>...</li>
<li>...</li>
<li>...</li>
<li>...</li>
<li>...</li>
<li>...</li>
</ul>
如何获取此列表的后半部分并在第一个<li>
之前移动它?
答案 0 :(得分:8)
var ul = $('ul');
var lis = ul.children('li');
ul.prepend(lis.slice(Math.round(lis.length / 2)))
示例: http://jsfiddle.net/8SNGn/
首先使用children()
[docs]方法缓存<ul>
元素及其<li>
个子元素。
然后,它使用prepend()
[docs]方法将最后li
个元素添加到ul
的开头。
您可以使用slice()
[docs]方法获取最后一个,并将li
元素的总数除以2(当您有奇数时使用Math.round()
向上舍入)。
修改强>
我刚注意到你的问题标题中有“clone”这个词。
问题的其余部分似乎没有暗示,但如果你真的想克隆下半部分,你可以使用clone()
[docs]方法。
var ul = $('ul');
var lis = ul.find('li');
ul.prepend(lis.slice(Math.round(lis.length / 2)).clone())
示例: http://jsfiddle.net/8SNGn/1/
如果您想要将舍入方向转向另一个方向,则可以使用Math.floor()
代替Math.round
。
答案 1 :(得分:1)
var items = $("ul li");
items.filter(function(index) {
return index > items.length / 2;
}).prependTo($("ul")[0]);
应该工作。
答案 2 :(得分:1)
var len = $('li').length - 1;
for(var i = 0; i < len/2; i++){
var $li = $('li').eq(len);
$('ul').prepend($li);
}
答案 3 :(得分:0)
jquery prepend http://api.jquery.com/prepend/
答案 4 :(得分:0)
查看jQuery的.slice()过滤器: