Quiero desactivar la visualización de todos los DIV etiquetados como readerPanelsRight en la class del elemento DIV, pero recibo este error.
La página contiene readerPanelsRight , pero sigo recibiendo el error "indefinido". ¿Cuál es el problema?
function updateStyleWithClass(elmId, value) { var elem = document.getElementsByClassName(elmId); if (typeof elem !== 'undefined' && elem !== null) { elem[0].style.display = value; } } function tabShowing(tabID) { var classMatcher = /(?:^|\s)readerPanelsRight(?:\s|$)/; var els = document.getElementsByTagName('*'); for (var i = els.length; i--;) { if (classMatcher.test(els[i].className)) { updateStyleWithClass(els[i], 'none'); } } // Element ID is showing code here.. }HTML:
<a href="#" onclick="tabShowing('elementID_1')">button_1</a> <a href="#" onclick="tabShowing('elementID_2')">button_2</a> <a href="#" onclick="tabShowing('elementID_3')">button_3</a> <div class="readerPanelsRight" id="elementID_1"></div> <div class="readerPanelsRight" id="elementID_2"></div> <div class="readerPanelsRight" id="elementID_3"></div>Consola:
Uncaught TypeError: elem[0] is undefinedGracias.
Estás haciendo esto mucho más complicado de lo que debe ser. Use getElementsByClassName() para hacer que los elementos se repita, no getElementsByTagId() . Y en updateStyleWithClass() , el argumento es el elemento, no necesita llamar a otra función de get .
function updateStyleWithClass(elem, value) { elem.style.display = value; } function tabShowing(tabID) { var els = document.getElementsByClassName('readerPanelsRight'); for (var i = els.length; i--;) { updateStyleWithClass(els[i], 'none'); } let selected_tab = document.getElementById(tabID); if (selected_tab) { updateStyleWithClass(selected_tab, "block"); } }