I was working on a project where i need to toggle on and off the class “off” of an element, whose class is “no-active-resources”, so it can “display: none”, but for some extrange reason I can’t manage to toggle on and off the class via my javascript code, I tried grabbing the element with “getElementByClassName” and “querySelector” but none seems to work, I also tried using the “add” and “remove” functions but it also didn’t work
Here’s the HTML code
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Minecraft Menu Replica</title>
<link rel="icon" href="../img/Minecraft-Launcher_Icon.png" type="image/x-icon">
<link rel="stylesheet" href="../css/style.css">
<script defer src="../javascript/main-menu.js"></script>
<script defer src="../javascript/general-menu.js"></script>
<script defer src="../javascript/avanzado-menu.js"></script>
<script defer src="../javascript/multijugador-menu.js"></script>
<script defer src="../javascript/cheats-menu.js"></script>
<script defer src="../javascript/resourcePacks-menu.js"></script>
<script defer src="../javascript/music.js"></script>
</head>
<body>
<div id="side-b">
<div class="menu off">
<div class="menu-division resources-div">
<div id="local-resources" class="resources-menus">
<ul class="grid-list">
<li class="no-active-resources resources-alerts">
<div class="coupling-div">
<p class="section-title">No hay ningun pack de recursos activo</p>
<p class="resources-desc">¿Quieres que tu mundo se vea diferente? Intenta activar un pack de recursos en "Disponibles".</p>
</div>
</li>
</ul>
</div>
</div>
</div>
</div>
Here’s the CSS code
.no-active-resources.off{
display: none;
}
.no-active-resources>.coupling-div>.section-title{
margin-bottom: 8px;
margin-left: 0px;
}
.no-active-resources>.coupling-div>.resources-desc{
display: block;
color: #D0D1D4;
font-size: 11.5px;
margin-left: 0px;
}
.grid-list .no-active-resources{
display: flex;
align-items: center;
border-top: 2px solid #1E1E1F;
height: 72px;
justify-content: center;
background-color: #313233;
}
ANd here’s the JavaScript code
'use strict';
let resourcesSliders = document.querySelectorAll('.resources-slider')
let resourcesMenus = document.querySelectorAll('.resources-menus');
let resourcesOptions = document.querySelectorAll('.resources-option');
let grid_lists = document.querySelectorAll('.grid-list');
let list_positions = document.querySelectorAll('.list-position');
var noActiveResourcesAlert = document.querySelector('.no-active-resources')
let noActResAlSelector = 1;
var noInactiveResourcesAlert = document.querySelector('.no-inactive-resources');
let noInactResAlSelector = 0;
let resourcesSelector = 0;
let arrows;
let list_arrows;
let resourceAmount;
let activateElementBtn;
let deleteElementBtn;
let sharedPacksSelector = 0;
let reverseResourcePacks = [...resourcePacks].reverse();
let InactiveLocalResources = [];
let ActiveLocalResources = [];
let globalResources = [];
document.addEventListener('click', e=>{
if(e.target==resourcesOptions[0] || e.target==resourcesOptions[0].firstElementChild){
if(resourcesSelector>0){
resourcesOptions[resourcesSelector].classList.toggle('clicked');
}
for(let i=0;i<resourcesMenus.length;i++){
resourcesMenus[i].classList.toggle('off');
}
resourcesOptions[0].classList.toggle('clicked');
resourcesSelector=0;
}else if(e.target==resourcesOptions[1] || e.target==resourcesOptions[1].firstElementChild){
if(resourcesSelector<1){
resourcesOptions[resourcesSelector].classList.toggle('clicked');
for(let i=0;i<resourcesMenus.length;i++){
resourcesMenus[i].classList.toggle('off');
}
}
resourcesOptions[1].classList.toggle('clicked');
resourcesSelector=1;
}else if(e.target==resourcesSliders[0].firstElementChild || e.target==resourcesSliders[0].lastElementChild.firstElementChild || e.target==resourcesSliders[0].lastElementChild.lastElementChild){
if(sharedPacksSelector==0){
resourcesSliders[0].firstElementChild.classList.toggle('clickedTwice');
resourcesSliders[0].firstElementChild.classList.toggle('clickedOnce');
sharedPacksSelector = 1;
}
else if(sharedPacksSelector==1){
resourcesSliders[0].firstElementChild.classList.toggle('clickedOnce');
resourcesSliders[0].firstElementChild.classList.toggle('clickedTwice');
sharedPacksSelector = 0;
}
}
})
LoadResourcePacks();
arrows = document.querySelectorAll('.arrow');
list_arrows = document.querySelectorAll('.list-arrow');
resourceAmount = document.querySelector('.local-resource-amount');
activateElementBtn = document.querySelectorAll('.activate-element');
deleteElementBtn = document.querySelectorAll('.delete-element');
resourceAmount.textContent = `(${InactiveLocalResources.length})`;
console.log(noActiveResourcesAlert, noActiveResourcesAlert.classList, noInactiveResourcesAlert, noInactiveResourcesAlert.classList)
document.addEventListener('click', e=>{
for(let i=0;i<arrows.length;i++){
if(e.target==arrows[i]){
if(arrows[i].dataset.open==0){
let listElement;
if(arrows[i].dataset.section==0){
listElement = arrows[i].parentElement.parentElement.parentElement.parentElement;
}else if(arrows[i].dataset.section==1){
listElement = arrows[i].parentElement.parentElement.parentElement;
}
let desc = listElement.lastElementChild;
let descHeight = desc.offsetHeight;
descHeight += 64;
listElement.style.height = `${descHeight}px`
arrows[i].dataset.open = 1;
arrows[i].textContent = '<';
}else if(arrows[i].dataset.open==1){
let listElement;
if(arrows[i].dataset.section==0){
listElement = arrows[i].parentElement.parentElement.parentElement.parentElement;
}else if(arrows[i].dataset.section==1){
listElement = arrows[i].parentElement.parentElement.parentElement;
}
let desc = listElement.lastElementChild;
let listElementHeight = listElement.offsetHeight;
let descHeight = desc.offsetHeight;
listElementHeight -= descHeight;
listElement.style.height = `${listElementHeight}px`
arrows[i].dataset.open = 0;
arrows[i].textContent = '>';
}
}
}
})
document.addEventListener('click', e=>{
for(let i=0;i<list_arrows.length;i++){
if(e.target==list_arrows[i] || e.target==list_arrows[i].parentElement.parentElement){
if(list_arrows[i].dataset.open==0){
let listElement = list_arrows[i].parentElement.parentElement.parentElement;
listElement.style.height = 'auto';
listElement.style.marginBottom = '14px';
list_arrows[i].dataset.open=1;
list_arrows[i].textContent='<'
}else if(list_arrows[i].dataset.open==1){
let listElement = list_arrows[i].parentElement.parentElement.parentElement;
listElement.style.height = '46px'
listElement.style.marginBottom = '0px';
list_arrows[i].dataset.open=0;
list_arrows[i].textContent='>'
}
}
}
});
document.addEventListener('click', e=>{
for(let i=0;i<activateElementBtn.length;i++){
if(e.target==activateElementBtn[i] || e.target==activateElementBtn[i].firstElementChild || e.target==activateElementBtn[i].lastElementChild){
let listElement = activateElementBtn[i].parentElement.parentElement;
ActivateElement(listElement.dataset.position);
RemoveListElements();
RearrangeLists();
}
}
})
document.addEventListener('click', e=>{
for(let i=0;i<deleteElementBtn.length;i++){
if(e.target==deleteElementBtn[i] || e.target==deleteElementBtn[i].firstElementChild || e.target==deleteElementBtn[i].lastElementChild){
let listElement = deleteElementBtn[i].parentElement.parentElement;
console.log(listElement.dataset.position);
DeactivateElement(listElement.dataset.position);
RemoveListElements();
RearrangeLists();
}
}
})
function ActivateElement(position){
for(let i=0;i<reverseResourcePacks.length;i++){
if(InactiveLocalResources[i]==reverseResourcePacks[position]){
InactiveLocalResources.splice(i,1);
reverseResourcePacks[position].active=true;
console.log(reverseResourcePacks[position], reverseResourcePacks[position].active)
break;
}
}
}
function DeactivateElement(position){
for(let i=0;i<reverseResourcePacks.length;i++){
if(ActiveLocalResources[i]==reverseResourcePacks[position]){
ActiveLocalResources.splice(i,1);
reverseResourcePacks[position].active=false;
console.log(reverseResourcePacks[position], reverseResourcePacks[position].active)
break;
}
}
}
function RemoveListElements(){
while(grid_lists[2].children.length>2){
grid_lists[2].removeChild(grid_lists[2].lastChild);
}
while(grid_lists[1].children.length>0){
grid_lists[1].removeChild(grid_lists[1].firstChild);
}
while(grid_lists[0].children.length>1){
grid_lists[0].removeChild(grid_lists[0].lastChild);
}
}
function RearrangeLists(){
let active_count = 0;
ActiveLocalResources = [];
InactiveLocalResources = [];
for(let i=0;i<reverseResourcePacks.length;i++){
if(reverseResourcePacks[i].global){
createGlobalListElement(reverseResourcePacks[i], i);
}else if(reverseResourcePacks[i].active){
active_count++
ActiveLocalResources.unshift(reverseResourcePacks[i]);
createActiveListElement(reverseResourcePacks[i], i, active_count)
}else{
InactiveLocalResources.unshift(reverseResourcePacks[i]);
createLocalListElement(reverseResourcePacks[i], i)
}
}
turnOnAndOffAlerts();
arrows = document.querySelectorAll('.arrow');
list_arrows = document.querySelectorAll('.list-arrow');
resourceAmount = document.querySelector('.local-resource-amount');
activateElementBtn = document.querySelectorAll('.activate-element');
deleteElementBtn = document.querySelectorAll('.delete-element');
resourceAmount.textContent = `(${InactiveLocalResources.length})`;
console.log(activateElementBtn);
console.log(deleteElementBtn);
console.log(ActiveLocalResources);
console.log(InactiveLocalResources);
}
function LoadResourcePacks(){
let active_count = 0;
for(let i=0;i<reverseResourcePacks.length;i++){
if(reverseResourcePacks[i].global){
globalResources.unshift(reverseResourcePacks[i]);
createGlobalListElement(reverseResourcePacks[i], i);
}else if(reverseResourcePacks[i].active){
active_count++;
ActiveLocalResources.unshift(reverseResourcePacks[i]);
createActiveListElement(reverseResourcePacks[i], i, active_count);
}else{
InactiveLocalResources.unshift(reverseResourcePacks[i]);
createLocalListElement(reverseResourcePacks[i], i);
}
}
turnOnAndOffAlerts();
}
function turnOnAndOffAlerts(){
if(InactiveLocalResources.length==0 && noInactResAlSelector==0){
noInactiveResourcesAlert.classList.toggle('off');
noInactResAlSelector=1;
console.log("noInactiveResourcesAlert activated");
}else if(InactiveLocalResources.length>0 && noInactResAlSelector==1){
noInactiveResourcesAlert.classList.toggle('off');
noInactResAlSelector=0;
console.log("noInactiveResourcesAlert deactivated");
}
if(ActiveLocalResources.length==0 && noActResAlSelector==0){
noActiveResourcesAlert.classList.toggle('off');
noActResAlSelector=1;
console.log("noActiveResourcesAlert activated");
}else if(ActiveLocalResources.length>0 && noActResAlSelector==1){
noActiveResourcesAlert.classList.toggle('off');
noActResAlSelector=0;
console.log("noActiveResourcesAlert deactivated");
}
}
function createLocalListElement(object, count){
grid_lists[2].innerHTML += `
<li class="list-element" data-position="${count}">
<div class="inline-list-element">
<div class="list-option">
<img src=${object.img}>
<p>${object.name}</p>
<span>
<p class="arrow" data-open="0" data-section="0">></p>
</span>
</div>
<div class="activate-element">
<img src="../img/activate-resource-icon.png">
<p>Activar</p>
</div>
</div>
<div class="element-description">
<p>${object.description}</p>
</div>
</li>`;
}
function createActiveListElement(object, count, listPosition){
if(object.config){
grid_lists[0].innerHTML += `
<li class="list-element" data-position="${count}">
<div class="inline-list-element">
<div class="element-grab">
<img src="../img/element-grab-icon.png">
<p class="list-position">${listPosition}</p>
</div>
<div class="list-option active">
<img src=${object.img}>
<p>${object.name}</p>
<span><p class="arrow" data-open="0" data-section="0">></p></span>
</div>
<div class="element-config">
<img src="../img/resource-config-icon.png">
<p>Config</p>
</div>
<div class="delete-element">
<img src="../img/delete-resource-icon.png">
<p>Eliminar</p>
</div>
</div>
<div class="element-description">
<p>${object.description}</p>
</div>
</li>`
}else{
grid_lists[0].innerHTML += `
<li class="list-element" data-position="${count}">
<div class="inline-list-element">
<div class="element-grab">
<img src="../img/element-grab-icon.png">
<p class="list-position">${listPosition}</p>
</div>
<div class="list-option no-config">
<img src=${object.img}>
<p>${object.name}</p>
<span><p class="arrow" data-open="0" data-section="0">></p></span>
</div>
<div class="delete-element">
<img src="../img/delete-resource-icon.png">
<p>Eliminar</p>
</div>
</div>
<div class="element-description">
<p>${object.description}</p>
</div>
</li>`
}
}
function createGlobalListElement(object, count){
grid_lists[1].innerHTML += `
<li class="list-element" data-position="${count}">
<div class="list-option">
<img src=${object.img}>
<p>${object.name}</p>
<span><p class="arrow" data-open="0" data-section="1">></p></span>
</div>
<div class="element-description">
<p>${object.description}</p>
</div>
</li>`
}
Also sorry if my English is bad, I’m still learning.
I was expecting the element to disspaear after another “li” element was added to the “ul” list and for the element to re-appear after all other “li” elements were gone