问题描述
|
我们有:
<ul>
<li>...</li>
<li>...</li>
<li>...</li>
<li>...</li>
<li>...</li>
<li>...</li>
<li>...</li>
<li>...</li>
<li>...</li>
</ul>
我如何获得此列表的后半部分并将其移至第一个“ѭ”之前?
解决方法
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()
[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
。
, var items = $(\"ul li\");
items.filter(function(index) {
return index > items.length / 2;
}).prependTo($(\"ul\")[0]);
应该管用。
, var len = $(\'li\').length - 1;
for(var i = 0; i < len/2; i++){
var $li = $(\'li\').eq(len);
$(\'ul\').prepend($li);
}
演示:
http://jsfiddle.net/NiceGuy4263/Ws5ZK/
, jQuery前置http://api.jquery.com/prepend/
, 看一下jQuery的.slice()过滤器:
http://api.jquery.com/slice