Mi cerebro se derrite por ¿Por qué no puedo seleccionar varios elementos con la misma clase (querySelector, querySelectorAll, getElementsByClassName, etc.) y usar classList para verificar si solo un div contiene una clase?
He visto tutoriales escritos donde usa exactamente getElementsbyClassName como ejemplos, como si funcionaran. En mi caso, en Firefox, es Uncaught TypeError: document.getElementsByClassName(...).classList is undefined
Le estoy dando a estos divs un cambio de clase css -
<div class="dot-container"> <div class="dot-button" id="1" onclick="activateDot(this.id)"></div> <div class="dot-button" id="2" onclick="activateDot(this.id)"></div> <div class="dot-button" id="3" onclick="activateDot(this.id)"></div> <div class="dot-button" id="4" onclick="activateDot(this.id)"></div> </div> function activateDot(id) { if(document.getElementsByClassName('dot-button').classList.contains('db-active')) { console.log('bruh'); } else { console.log('bruw'); } document.getElementById(id).classList.toggle('db-active'); }Lo que funcionó iba -
function activateDot(id) { document.getElementById(1).classList.remove('db-active'); document.getElementById(2).classList.remove('db-active'); document.getElementById(3).classList.remove('db-active'); document.getElementById(4).classList.remove('db-active'); document.getElementById(id).classList.toggle('db-active'); }Brrrr
getElementsByClassName devuelve una lista de nodos DOM, mientras que obtener un elemento por ID devuelve un solo elemento. Debe iterar sobre la lista de elementos y agregar / alternar la clase deseada para cada uno de ellos