Клонируйте <li>и бросайте с помощью jQuery - PullRequest
0 голосов
/ 25 июня 2011

У нас есть:

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

Как мне получить вторую половину этого списка и переместить ее перед первым <li>?

Ответы [ 5 ]

8 голосов
/ 25 июня 2011
var ul = $('ul');
var lis = ul.children('li');

ul.prepend(lis.slice(Math.round(lis.length / 2)))

Пример: http://jsfiddle.net/8SNGn/

Сначала выполняется кэширование элемента <ul> и его потомков <li> с использованием метода children() [документы] .

Затем он использует метод prepend() [docs] для добавления последних li элементов в начало ul.

Последние можно получить, используя метод slice() [документы] и передав ему общее количество li элементов, деленное на 2 (округляется с использованием Math.round(), если у вас есть нечетное число).


EDIT:

Я только что заметил, что в заголовке вашего вопроса есть слово "клон" .

Остальная часть вопроса, кажется, не предполагает этого, но если вы действительно хотите клонировать последнюю половину, вы бы использовали 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 голос
/ 25 июня 2011
var len = $('li').length - 1;

for(var i = 0; i < len/2; i++){
    var $li = $('li').eq(len);
    $('ul').prepend($li);

}

DEMO: http://jsfiddle.net/NiceGuy4263/Ws5ZK/

1 голос
/ 25 июня 2011
var items = $("ul li");
items.filter(function(index) {
    return index > items.length / 2;
}).prependTo($("ul")[0]);

Должно работать.

0 голосов
/ 25 июня 2011

Посмотрите на фильтр jsquery .slice ():

http://api.jquery.com/slice

0 голосов
/ 25 июня 2011
...