2013-06-21 2 views
2

я есть контейнер DIV с детьми DIVs как:Удалить все элементы до активного элемента и добавить к нижней

<div class="parent"> 
    <div id="one" class="child"></div> 
    <div id="two" class="child"></div> 
    <div id="three" class="child"></div> 
    <div id="four" class="child active"></div> 
    <div id="five" class="child"></div> 
</div> 

то, что я хочу, чтобы все дочерние ДИВ до того .active ребенка DIV будут удалены и будут добавлены в дно, так что это будет выглядеть следующим образом:

<div class="parent"> 
    <div id="four" class="child active"></div> 
    <div id="five" class="child"></div> 
    <div id="one" class="child"></div> 
    <div id="two" class="child"></div> 
    <div id="three" class="child"></div> 
</div> 

Как я могу сделать это в JQuery?

спасибо :)

ответ

4

Как это:

$('div:lt('+$('.active').index()+')', '.parent').appendTo('.parent'); 

FIDDLE

+0

это хороший –

+0

@roasted - Спасибо! – adeneo

+1

должен быть способ сделать это без конкатенации строк ... – Alnitak

1

Что-то вроде этого -

var $cloned = $('.parent .active').prevAll().clone().end().remove(); 
$('.parent').append($cloned.get().reverse()); 

Demo ---->http://jsfiddle.net/AqS4u/1/

+1

Почему клонировать элементы? –

0

Это следует сделать это:

$('.active').prevAll().appendTo('.parent'); 

EDIT на самом деле, нет, но я оставлю здесь для потомков - .prevAll() коллекция возвращается в обратном порядке, поэтому Append не работает правильно.

+0

Я получаю 4,5,3,2,1 не 4,5,1,2,3. – j08691

+0

Да, я сейчас изучаю это. Удивительно, поскольку я думал, что коллекции jQuery всегда находятся в порядке документа. – Alnitak

+1

prevВсе выбор в обратном порядке, попробовал это, и только я мог придумать '$ ($ ('. Active'). PrevAll(). Get(). Reverse()). AppendTo ('. parent '); ' – adeneo

1

В случае кратны этих divs:

$('.parent').each(function() { 
    $(this.firstChild).nextUntil('.active').appendTo(this); 
}); 

DEMO

+0

Нет необходимости в' .each() 'на этом. – j08691

+0

Не для примера. Вот почему я написал: * «В случае, если их несколько:« * –

2
$('.active').nextAll().addBack().prependTo('.parent'); 

jsFiddle example

Нет клонированию, не конкатенации, и не .each()