4 回答

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超9個(gè)贊
在您的代碼中,如果其中一個(gè)具有其中一個(gè)類或不具有其中一個(gè)類,則將設(shè)置父級(jí) - 您想要使用 .some 或類似的
單擊 div 打開(kāi)它們并測(cè)試容器是否應(yīng)更改類
單擊外部可取消課程開(kāi)放
$(function() {
const $container = $('.masonry');
const testOpen = () => {
$container.toggleClass("error",
$container.find(".open").length > 0
);
}
$('.masonry-item').on("click", function() {
$(this).toggleClass("open");
testOpen()
});
$(document).on("click", function(e) {
if (!$container.is(e.target) && $container.has(e.target).length === 0) {
$container.find(".open").removeClass("open");
testOpen()
}
});
});
.error {
color: red;
border: 1px solid black;
display: inline-block;
}
.open {
font-weight: bold;
text-decoration: underline;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="masonry">
<div class="masonry-item">One</div>
<div class="masonry-item">Two</div>
<div class="masonry-item">Three</div>
<div class="masonry-item">Four</div>
</div>
outside

TA貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超7個(gè)贊
因?yàn)閺倪壿嬌现v,如果至少有一項(xiàng)具有.open,您就不必?fù)?dān)心其余的.masonry-item。我的猜測(cè)是您的代碼不適用于類似的情況['','open','']。即使在迭代第二次設(shè)置了“不透明度”類,迭代 3 也會(huì)刪除該類。
$('.masonry-item').each(function() {
if ($(this).has('.open')) {
$(this).parent().addClass('opacity');
return false; // breaks
} else {
$(this).parent().removeClass('opacity');
}
});

TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超5個(gè)贊
而不是循環(huán)外部類的所有子級(jí),檢查 paren 是否有類打開(kāi)的子級(jí)
if($('.masonry').find('.open').length !== 0){
$('.masonry').addClass('opacity');
}else{
$('.masonry').removeClass('opacity');
}

TA貢獻(xiàn)1934條經(jīng)驗(yàn) 獲得超2個(gè)贊
您當(dāng)前方法的問(wèn)題是,假設(shè)您有 3 個(gè)項(xiàng)目,第二個(gè)項(xiàng)目具有“開(kāi)放”類;您的腳本將逐個(gè)測(cè)試每個(gè)項(xiàng)目,然后關(guān)閉、打開(kāi)、然后再次關(guān)閉父級(jí)的課程。僅當(dāng)您的最后一個(gè)項(xiàng)目具有所需的類時(shí),此腳本才會(huì)起作用,因?yàn)槟菚r(shí)它不會(huì)被覆蓋。
您需要檢查該類中的任何位置是否至少有一項(xiàng)。如果是,則打開(kāi)家長(zhǎng)的班級(jí)。您可以使用 find() 來(lái)完成此操作,這比迭代每個(gè)項(xiàng)目要少得多:
const $container = $(".masonry");
const hasOpenItem = !!$container.find(".masonry-item.open");
$container[ hasOpenItem ? "addClass" : "removeClass" ]('opacity');
添加回答
舉報(bào)