#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
селектор
Ответ №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