#jquery
#jquery
Вопрос:
У меня есть это:
<div class="tab-wrap">
<div class="tab-item sold-out" aria-hidden="true" tabindex="0">Tab 1</div>
<div class="tab-item sold-out" aria-hidden="true" tabindex="-1">Tab 2</div>
<div class="tab-item sold-out" aria-hidden="true" tabindex="-1">Tab 3</div>
<div class="tab-item" aria-hidden="true" tabindex="-1">Tab 4</div>
</div>
Чего я хочу добиться, так это выбрать первый элемент «.tab», не содержащий класс «.sold-out», и добавить к нему класс «.active». Это может варьироваться, иногда это может быть первый div, иногда третий. Я хочу проверить, есть ли первый доступный div без распроданного класса.
То, что у меня есть, это добавляет его к первому div, независимо от того, есть ли в нем класс «распродано»:
if($(".tab-wrap > .tab-item").not(':has(.sold-out)')){
$(".tab-wrap > .tab-item").first().addClass("active")
}
Комментарии:
1.Стоит рассмотреть, что
:has
делает api.jquery.com/has Сократите набор сопоставляемых элементов до тех, у которых есть потомок, соответствующий элементу selector или DOM. — .tab-item не имеет .sold-out в качестве потомка
Ответ №1:
Вы можете достичь того, что вам нужно, в одном селекторе, используя комбинацию :not
и :first
. Попробуйте это:
$('.tab-item:not(.sold-out):first').addClass('sold-out');
.sold-out { color: #C00; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="tab-wrap">
<div class="tab-item sold-out" aria-hidden="true" tabindex="0">Tab 1</div>
<div class="tab-item sold-out" aria-hidden="true" tabindex="-1">Tab 2</div>
<div class="tab-item sold-out" aria-hidden="true" tabindex="-1">Tab 3</div>
<div class="tab-item" aria-hidden="true" tabindex="-1">Tab 4 (class added here)</div>
<div class="tab-item" aria-hidden="true" tabindex="-1">Tab 5</div>
<div class="tab-item" aria-hidden="true" tabindex="-1">Tab 6</div>
<div class="tab-item" aria-hidden="true" tabindex="-1">Tab 7</div>
</div>
Ответ №2:
Вот то, что вы хотите, только в одной строке с обоими селекторами
$('.tab-item:not(.sold-out):first').addClass('sold-out');