как мне фильтровать через divs и отсоединять

#jquery

#jquery

Вопрос:

Как бы я отфильтровал список дочерних divs и отсоединил divs на основе определенного значения индекса.

Так, например, я хочу иметь возможность решать, какой индекс я хочу отсоединить. например, допустим, у меня есть 10 дочерних divs внутри элемента с именем holder. Я хочу иметь возможность фильтровать их и удалять, чтобы не сказать эту последовательность [0, 3, 5, 7]

Приведенная выше последовательность может измениться. Когда я фильтрую через divs, я хочу иметь возможность отсоединять их, а затем добавлять их обратно с помощью jquery.

Я изучил метод фильтрации, но не уверен, как фильтровать только нужные мне индексы элементов. У кого-нибудь есть хорошие идеи.

 <div id="holder">
 <div>1</div>
 <div>2</div>
 <div>3</div>
 <div>4</div>
 <div>5</div>
 <div>6</div>
 <div>7</div>
 <div>8</div>
 <div>9</div>
 <div>10</div>
</div>
  

Комментарии:

1. значение jquery .detach()

Ответ №1:

Вот решение, если вы хотите полагаться на текст внутри div:

 $('#holder div').each(function(){
    var filter = ['0', '3', '5', '7'];

    if($.inArray($(this).text(), filter) > -1)
    {
        $(this).detach();
    }
});
  

и другое решение, если вы хотите полагаться на индексы:

 $('#holder div').each(function(i){
    var filter = [0, 3, 5, 7];

    if($.inArray(i, filter) > -1)
    {
        $(this).detach();
    }
});
  

Комментарии:

1. Зачем помещать var filter внутри цикла?

2. @bricker Его размещение является иллюстративным.

3. Как бы я прикрепил их обратно в том же порядке.

4. @Chapsterj вы могли бы сохранить массив и поместить в него элементы, однако, если для вас важен порядок, вам следует просто использовать .hide() и .show() . В качестве альтернативы вы можете просто добавить элементы и использовать плагин, который может сортировать элементы dom.

5. Думаю, я мог бы использовать hide и show. Я попробую, спасибо за ответы

Ответ №2:

Попробуйте n-th child селектор

http://api.jquery.com/nth-child-selector/

Ответ №3:

Если я правильно понимаю вопрос, вы могли бы это сделать… учитывая, что порядок и т. Д. Может Измениться.

 var a = $('#holder div:eq(0), #holder div:eq(3), #holder div:eq(5)').detach();

$('#holder').append(a[0], a[1], a[2]);
  

Пример: http://jsfiddle.net/wHbVq /

Комментарии:

1. Это сработало бы, но не позволяет изменять числа. Я хочу иметь возможность иметь одно число в последовательности или 10 или между ними. Числа могут быть случайными. Я надеялся, что смогу, возможно, передать массив чисел, и я мог бы фильтровать divs на основе массива чисел.

2. Исправьте Chapsterj. Я просто писал функцию, чтобы согласиться с этим, но @Ingenu опередил меня. Используйте его ответ.

Ответ №4:

Вот пример использования filter . Вам нужно возвращать только truthy значения для сохранения индекса, что означает, что вы хотите сохранить только те элементы, которые должны быть отсоединены.

 $('#holder div').filter(function(i){
  var filter = ['0', '3', '5', '7'];
  return $.inArray($(this).text(), filter) > -1);
}).detach();
  

В качестве альтернативы вы можете просто использовать селекторы для фильтрации на основе индекса:

 $('#holder div').filter(':eq(0), :eq(3), :eq(5), :eq(7)').detach();
  

Для линейной фильтрации вы должны использовать :nth-child()

 $('#holder div').filter(':nth-child(2n 3)').detach() //indices 3, 5, 7, 9, etc