#javascript #jquery
#javascript #jquery
Вопрос:
Несколько родительских элементов с разным количеством дочерних элементов, например:
<div class="items">
<div></div>
<div>hide this child</div>
<div></div>
</div>
<div class="items">
<div></div>
<div>don't hide this child</div>
</div>
Можно почти решить с помощью этого:
if ($(".items div:nth-child(3)").length) {
$(".items div:nth-child(2)").hide();
}
Он скрывает второй div у обоих родителей, но он должен скрываться только у первого родителя, потому что у второго родителя нет третьего дочернего элемента.
Комментарии:
1. В чистом JS-стиле вы можете попробовать так: codepen.io/Maniraj_Murugan/pen/pobErwV
Ответ №1:
Использование CSS last-child
.items div:nth-child(2):not(:last-child) {
display: none;
}
<div class="items">
<div></div>
<div>hide this child</div>
<div></div>
</div>
<div class="items">
<div></div>
<div>don't hide this child</div>
</div>
Использование Jquery
$(".items div")
выбирает все дочерние элементы. Таким образом, вы можете использовать each()
для выбора дочернего элемента из другого родительского
$(".items").each(function() {
if ($("div", this).length > 2) {
$("div:nth-child(2)", this).hide();
}
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="items">
<div></div>
<div>hide this child</div>
<div></div>
</div>
<div class="items">
<div></div>
<div>don't hide this child</div>
</div>
Примечание: селектор потомков (пробел) выбирает всех как дочерних, так и внуков. Если вам нужны только дочерние элементы, используйте дочерний селектор (>)
Ответ №2:
Ваш селектор захватывает все .items
в документе, поэтому он почти всегда будет скрывать второй.
Вместо этого вы хотите оценить дочерние элементы каждого элемента отдельно, чтобы определить, следует ли его скрывать или нет.
Смотрите демонстрационный код ниже
$(function() {
// get all the items
var items = $(".items");
// check their children, if more than 2 children, hide them
$.each(items, function(idx, item) {
if ($(item).children().length > 2) {
$(item).hide();
}
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="items">
<div></div>
<div>hide this child</div>
<div></div>
</div>
<div class="items">
<div></div>
<div>don't hide this child</div>
</div>