Как сдвинуть div в порядке после удаления, скрывая div с помощью jquery / css

0

Это скорее конкретная ситуация, но у меня есть строки 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> 
  • 0
    покажи нам, что ты пробовал и сделай скрипку.
  • 1
    поделитесь своим jsfiddle
Показать ещё 2 комментария

1 ответ

2
Лучший ответ

Попробуйте эту скрипку: 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));
        }
    });
});
  • 0
    Единственная проблема с этим, я не основываю это на ширине. Есть два отдельных раздела, один с четырьмя элементами в строке, а затем другой раздел со всеми оставшимися элементами (с 4-мя рядами всегда).
  • 0
    мы могли бы увидеть какой-то реальный код? Вы размещаете элементы в строке в таблице или с родительским div в качестве строки? было бы полезно больше информации и кода.
Показать ещё 18 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню