$('.list').find('li:gt(2)').hide();
// или
$('li:gt(2)', '.list').hide();
// или
$('.list li:nth-child(3)').nextAll().hide();
// или
$('.list li:nth-child(n + 4)').hide();
// или
$('.list li').next().next().next().hide();
// или
$('.list > + + +').hide();
Или, к чёрту jquery:
Array
.from(document.querySelectorAll('.list'))
.flatMap(n => [...n.children].slice(3))
.forEach(n => n.hidden = true);
// или (тут надо будет стиль добавить: .hidden { display: none; })
[].forEach.call(document.getElementsByClassName('list'), n => {
[].forEach.call(n.getElementsByTagName('li'), (m, i) => {
m.classList.toggle('hidden', i > 2);
});
});
Если подобное надо выполнять неоднократно, а селекторы и количество элементов, оставляемых видимыми, разнятся, то можно и функцию сообразить (чтобы можно было делать так, например:
hide('.list', 'li', 3);
):
function hide(containerSelector, elementSelector, hideFrom) {
$(containerSelector).each((i, n) => {
$(elementSelector, n).slice(hideFrom).hide();
});
}
// или
function hide(containerSelector, elementSelector, hideFrom) {
for (const n of document.querySelectorAll(containerSelector)) {
const elements = n.querySelectorAll(elementSelector);
for (let i = hideFrom; i < elements.length; i++) {
elements[i].style.display = 'none';
}
}
}