Это скорее конкретная ситуация, но у меня есть строки div. Прямо сейчас, если я нажму "Просмотреть все", появится вторая строка, изображенная на рисунке ниже. Он находится в строках с четырьмя столбцами.
View All
[a] [b] [c] [d]
[e] [f] [g] [h]
Я хотел бы, если [d] будет удалено, [e] должно занять свое место, а все остальные элементы должны перемещаться на одно место, так что это выглядит так:
[a] [b] [c] [e]
[f] [g] [h]
У меня код разбит на два раздела. Один раздел (верхняя строка, изображенная на рисунке выше) - это всего лишь четыре divs/items подряд. Второй раздел содержит все остальные строки.
Я сделал это таким образом, что два раздела питаются разными данными модели (используя цикл foreach).
Есть простой способ сделать это? У меня уже есть это, так что вы можете удалить div, но не заставлять его занять место, а затем переместить остальных. Спасибо.
РЕДАКТИРОВАТЬ:
<div class="section7 clearfix">
<div class="container">
<section class="Con1Artists" id="show">
<article class="topHeadingTitle">
<article class="vieAllTitle"><a id="show2" href="#">View All</a></article>
</article>
<article class="MusicianCol clearfix" id="hide">
<?php $tracker=0; ?>
@foreach($latest_fan_likes as $like)
@if($tracker==3)
<article class="boxBg latest last" id="box-{{$like->id}}">
@else
<article class="boxBg latest" id="box-{{$like->id}}">
@endif
<div class="image-height">@if(Auth::user()->get()->id==$fan->id)<a href="#" class="remove-artist"><i id="all-{{$like->id}}" class="remove fa fa-times fa-lg"></i></a>@endif<a href="/artists/{{$like->id}}" title="image"><img src="{{$like->image_path}}" width="260" height="159" alt="" title=""></a></div>
<article class="bottomTextMusic">
<h2><a href="/artists/{{$like->url_tag}}">{{$like->stage_name}}</a></h2>
</article>
<article class="tooltipCon">
<div class="nav-area">
<div class="navbar">
<div class="container">
<ul class="nav">
<li class="">
</li>
</ul>
</div>
</div>
</div>
</article>
</article>
<?php $tracker++; ?>
@endforeach
<?php $offset=0; ?>
@foreach($past_fan_likes as $like)
@if($offset%4==0 && $offset > 0)
@endif
@if($offset%4==0 && $offset > 0)
<article class="boxBg past last" id="box-{{$like->id}}">
@else
<article class="boxBg past" id="box-{{$like->id}}">
@endif
<div class="image-height"><a href="#" class="remove-artist"><i id="all-{{$like->id}}" class="remove fa fa-times fa-lg"></i></a><a href="/artists/{{$like->id}}" title="image"><img src="{{$like->image_path}}" width="260" height="159" alt="" title=""></a></div>
<article class="bottomTextMusic">
<h2><a href="/artists/{{$like->url_tag}}">{{$like->stage_name}}</a></h2>
</article>
<article class="tooltipCon">
<div class="nav-area">
<div class="navbar">
<div class="container">
<ul class="nav">
<li class="">
</li>
</ul>
</div>
</div>
</div>
</article>
</article>
<?php $offset++; ?>
@endforeach
</article>
</section>
Попробуйте эту скрипку: http://jsfiddle.net/ScZbP/ и нажмите div, содержащий "d". Вам действительно нужно увидеть ваш код js и css, чтобы понять, почему он ведет себя так, как вам нравится.
JS
$('#parent div').click(function(){
$(this).remove();
});
HTML
<div id="parent">
<div>a</div>
<div>b</div>
<div>c</div>
<div>d</div>
<div>e</div>
<div>f</div>
<div>g</div>
<div>h</div>
</div>
CSS
#parent{
width:200px;
}
#parent div{
float:left;
width:50px;
background:#ddd;
cursor:pointer;
}
EDIT--------------
ИЛИ: Объедините свои статьи и не перечислите их в отдельных разделах. Когда вы повторяете свой список "последние", добавьте "последний" класс в каждую статью следующим образом:
Вот сценарий для него http://jsfiddle.net/Td8T8/2/ и код ниже.
<article class="boxBg latest">
your content
</article>
Во время итерации на каждый четвертый элемент вам нужно будет добавить еще один класс, который я только что установил как "последний". Зачем устанавливать этот класс? Я доберусь до этого на следующем шаге ниже.
<article class="boxBg latest last">
your content
</article>
Для вашего "прошлого списка" добавьте "прошлый" класс при итерации:
<article class="boxBg past">
your content
</article>
И затем на каждый четвертый элемент снова добавьте "последний" класс.
<article class="boxBg past last">
your content
</article>
Для статей с классом "прошлое" их не отображать:
.past{
display:none;
}
И плавайте детские статьи:
article.boxBg{
float:left;
border:1px solid #aaa;
}
Чтобы показать "все", как вы хотели, нажмите на свой элемент "Все" и покажите все скрытые "прошлые" предметы
$('#show2').click(function(){
$('.past').show();
});
Поэтому теперь вам нужно отображать их в строках, содержащих 4 элемента, поэтому добавьте элемент для разделения строк/статей после каждого "последнего" элемента, который должен иметь каждый 4-й элемент в списке:
$('<div class="spacer"></div>').insertAfter($('.last'));
// CSS
.spacer{
height:10px;
width:100%;
float:left;
}
Теперь отредактируйте щелчок элемента, чтобы удалить его:
$('.MusicianCol .boxBg').click(function(){
// remove item clicked
$(this).remove();
// remove all spacer elements since the list order
// has now changed
$('.spacer').remove();
// iterate through remaining articles
$('.boxBg').each(function(){
// if it has the "last" class then remove it
$(this).removeClass('last');
// now we check the index of this item and detect
// if it one of the "4th's"
if (($(this).index() + 1) % 4 == 0){
// add the "last" class to it
$(this).addClass('last');
// add spacer again
$('<div class="spacer"></div>').insertAfter($(this));
}
});
});