MDN将成为您最好的朋友,他们拥有您可以想到的所有Web API的完整文档。
https://developer.mozilla.org/en-US/docs/Web/API/Element/querySelectorAll
https://developer.mozilla.org/en-US/docs/Web/API/Element/classList
querySelectorAll()
返回一个节点列表,其类似于一个JS阵列。此类型上没有classList
属性,因此您必须对NodeList中的每个元素进行操作。
这是这里的大问题,另一个是你执行交换的方式。在所有'.hot'元素上切换(冷却)类,然后在所有'.cold'元素上切换'热门'类,即可切换(如果存在则删除,如果不存在则添加)。如果你希望在这个操作之前没有元素既热又冷(这看起来基于你的问题),那么结果就是所有'.hot'元素现在都是'.cold',所有'.cold'元素都是现在'.cold'和'.hot'。图片来看,你有4个元素:
<div class="hot"></div>
<div class="hot"></div>
<div class="cold"></div>
<div class="cold"></div>
函数中的第一条语句执行。你把所有的热元素和切换冷,造成这样的:
<div class="hot cold"></div>
<div class="hot cold"></div>
<div class="cold"></div>
<div class="cold"></div>
然后你把所有的冷元素和切换热,造成这样的:
<div class="cold"></div>
<div class="cold"></div>
<div class="cold hot"></div>
<div class="cold hot"></div>
你想要做什么是得到完整的列表,然后在这两个列表中切换两个类别:
var list = document.querySelectorAll('#groceries .hot, #groceries .cold');
list.forEach(el => el.classList.toggle('hot'));
list.forEach(el => el.classList.toggle('cold'));
你会得到什么结果? – Soviut
@Kinduser绝对是https://developer.mozilla.org/en/docs/Web/API/Element/classList – Soviut
这样,你不是先切换热 - >冷,然后立即切换所有原始.cold再加上所有最近切换的冷 - 立即再次热? –