селектор jQuery-все, кроме первого
У меня есть небольшой вопрос селекторов jQuery, у меня есть следующий html:
<div class="member-info first"></div>
<div class="member-info"></div>
<div class="member-info"></div>
Я хочу скрыть (используя jQuery) все divs, которые содержат класс "member-info", Но не тот, который содержит "первый" класс, какие-либо мысли?
8 ответов
$('.member-info:not(.first)').hide();
использует not-selector
(docs) исключить элементы с помощью first
класса.
или если цель first
класс просто определить первый, а затем сделать это вместо:
$('.member-info').slice(1).hide();
использует slice()
(docs) метод для возврата набора, начинающегося со второго совпадения.
$(".member-info:not('.first')").hide();
$(".member-info").filter(":not('.first')").hide();
$('.member-info').not('.first').hide();
$(".member-info:not(:first)").hide();
$(".member-info").filter(":not(':first')").hide();
$('.member-info').not(':first').hide();
$(".member-info:not(:eq(0))").hide();
$(".member-info").filter(":not(':eq(0)')").hide();
$(".member-info").not(":eq(0)").hide();
$(".member-info:not(:lt(1))").hide();
$(".member-info").filter(":not(':lt(1)')").hide();
$(".member-info").not(":lt(1)").hide();
$(".member-info:gt(0)").hide();
$(".member-info").filter(':gt(0)').hide();
$(".member-info").slice(1).hide();
все возможные способы, которые приходят мне на ум. Я также сделал сравнение производительности JavaScript где вы можете найти некоторые неожиданные результаты.
все эти образцы работают с v1.10.* of jQuery.
в большинстве случаев это самый быстрый $(".member-info").slice(1).hide();
и похоже на соответствующий, а не мозговой штурм ответ
Это не совсем отвечает на ваш вопрос, но вы можете пропустить первый сопоставленный элемент с помощью gt.
например:
$('div.member-info:gt(0)')
использовать :не() селектор. Например:
$(".member-info:not(first)").hide();
Если первый действительно всегда первый ребенок, попробуйте
$(".member-info:not(member-info:first)").hide();
Я тоже столкнулся с этой проблемой. Однако у меня не было удобного класса с именем first
обозначение элемента для исключения. Вот решение я использовал для селектора в контексте этого примера:
$('.member-info:not(:first)');//grab all .member-info except the first match
@AuthorProxy
, @David Thomas
и @Maximilian Ehlers
всем советую $('.member-info').not('.first').hide();
в их ответах, которые являются очень быстрым и очень читаемым решением.
из-за того, как оцениваются селекторы jQuery справа-налево, вполне читабельный ".member-info:not(.first)"
на самом деле замедляется этой оценкой.
быстрое и легкое для чтения решение действительно использует версию функции .not(".first")
или даже просто .not(":first")
:
например
$(".member-info").not(".first").hide(); // Class selector
или
$(".member-info").not(":first").hide(); // Positional selector
JSPerf связанных селекторов: http://jsperf.com/fastest-way-to-select-all-expect-the-first-one/6
.not(':first')
всего на несколько процентных пунктов медленнее, чем slice(1)
, но очень читается как "я хочу все, кроме первого".