克隆<李>并使用jQuery进行投掷

Clone <li> and throw with jQuery

本文关键字:jQuery lt gt 克隆      更新时间:2023-09-26

我们有:

<ul>
<li>...</li>
<li>...</li>
<li>...</li>
<li>...</li>
<li>...</li>
<li>...</li>
<li>...</li>
<li>...</li>
<li>...</li>
</ul>

如何获取此列表的后半部分并将其移动到第一个<li>之前?

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