У меня есть список div:
<div class="person"></div>
<div class="person"></div>
<div class="person"></div>
Я хочу скрыть все divs, кроме 107-го и 2-го.
Я пробовал использовать filter
jquery, но не мог полностью обернуть голову вокруг решения.
Вы можете фильтровать (на основе нуля)
var arr = [3, 107];
$('.person').filter(function(i) {
return $.inArray((i+1), arr) == -1;
}).hide();
Вы можете просто использовать простой старый CSS:
.person {
display: none;
}
.person:nth-child(2),
.person:nth-child(107) {
display: block;
}
Вы ищете селектор "nth-child".
Следующее пропустит два, и каждый другой div будет выбран правилами CSS внутри.
div.person:nth-child(1n+2)
В твоем случае:
div.person:nth-child(107), div.person:nth-child(2)
{
/* Rules here */
}
Вот чистое решение JS, если это плавает на вашей лодке, хотя быстрая CSS также была бы вариантом:
[].forEach.call( document.querySelectorAll('div.person'), function(el) {
el.style.display = 'none';
});
[].forEach.call(document.querySelectorAll('div.person:nth-child(2), div.person:nth-child(107)', function(el) {
el.style.display = 'block';
})
Соберите список людей, а затем используйте .eq()
чтобы выбрать их (основано на 0). Вот простой пример:
var people = $('.person');
var exclude = people.eq(3).add(people.eq(5));
people.not(exclude).hide();
Используйте селектор CSS или используйте селектор Jquery следующим образом:
.person:nth-child(107) { display:none; }
$(".person").eq(106).hide();
$('.person').not(':nth-of-type(2),:nth-of-type(107)').hide()