3 回答

TA貢獻(xiàn)1780條經(jīng)驗(yàn) 獲得超5個(gè)贊
TL;DR 您需要添加 css 來(lái)隱藏/顯示圖像。
我將提出一種稍微不同的方法,即直接切換圖像上的類,以避免對(duì)標(biāo)記和巨大的 CSS 選擇器進(jìn)行更復(fù)雜的重新排列。
但首先,為了更容易,您應(yīng)該將標(biāo)簽放在img它們的內(nèi)部li,而不是旁邊。
因此,首先,讓我們將結(jié)束li標(biāo)記移至末尾,位于img. 注意我還刪除了 的內(nèi)聯(lián)樣式style="display: none;"。
for (let i = 0; i < products.length; i++) {
? console.log(products[i]);
? if (products[i].featured) {
? featuredProductsContainer.innerHTML +=
? ? ? `<li class="featured-products">
<p>${products[i].title}<i class="far fa-flag" data-name="${products[i].title}"></i></p>
<img src="http://localhost:1337${products[i].image.url}" class="${products[i].title}"?
height="300" width="300"></li>`;
? }
}
然后,在您的點(diǎn)擊處理程序中,讓我們做一些不同的事情:
function clicked(event) {
? // remove all active classes
? const $imgs = document.querySelectorAll('.fas')
? $imgs.forEach(i => i.classList.toggle('fas'))
? // add active class to targeting img
? const $img = event.target.closest('li.featured-products').querySelector('img')
? $img.classList.toggle("fas")
? $img.classList.toggle("far");
}
最后,修改自@barmar
.featured-products img.fas {
? display: block;
}
.featured-products img.far {
? ? display: none;
}

TA貢獻(xiàn)1848條經(jīng)驗(yàn) 獲得超6個(gè)贊
有很多方法可以實(shí)現(xiàn)此目的,很大程度上取決于觸發(fā)圖標(biāo)活動(dòng)狀態(tài)的因素。如果它是任何類型的輸入,并且您可以將數(shù)據(jù)保存在同一個(gè)容器中,那么您需要做的就是向父級(jí)添加一個(gè)“活動(dòng)”CSS 類。這是最高效的方法,因?yàn)槟梢詫⒆x取、寫入和任何回流保持在最低限度。只需在 css 中為活動(dòng)類添加一般規(guī)則: .active img { visibility: visible; }
如果圖像位于單獨(dú)的元素中,您可以將數(shù)據(jù)集自定義屬性添加到 html 中的圖標(biāo)。您可以在 Javascript 中使用一個(gè)值。
IE。
<img id="icon" dataset-foo="imgContainer">
并在JS中
var imgContainer = document.getElementById(icon.dataset.foo)
imgContainer.classList.add("active")
您可以將其包裝在函數(shù)中,并且可以將任何引用保存在對(duì)象中。通過(guò)這種方式,可以輕松跟蹤任何數(shù)據(jù)并獲得非常可讀的代碼。

TA貢獻(xiàn)1809條經(jīng)驗(yàn) 獲得超8個(gè)贊
您可以使用 CSS 來(lái)做到這一點(diǎn)。由于您的事件偵聽(tīng)器會(huì)切換far
和fas
類,因此請(qǐng)使用與這些容器內(nèi)部匹配的 CSS 選擇器img
。
.featured-products.fas img { display: block; } .featured-products.far img { display: none; }
添加回答
舉報(bào)