У меня проблема с моим JavaScript, я не могу правильно показать свои вкладки.
Я не могу показать вкладки на суб-вкладках, не знаете ли вы, какая проблема может быть?
Здесь одна часть моего кода JavaScript (полный код находится в моем jsfiddle):
function basla() {
var tabListItems = document.getElementById('tabs').children;
for ( var i = 0; i < tabListItems.length; i++ ) {
if ( tabListItems[i].nodeName == "LI" ) {
var tabLink = getFirstChildWithTagName1( tabListItems[i], 'A' );
var id = getHash1( tabLink.getAttribute('href') );
tabLinks[id] = tabLink;
contentDivs[id] = document.getElementById( id );
}
}
var i = 0;
for ( var id in tabLinks ) {
tabLinks[id].onclick = showTab1;
tabLinks[id].onfocus = function() { this.blur(); };
if ( i == 0 ) tabLinks[id].className = 'selected';
i++;
}
var i = 0;
for ( var id in contentDivs ) {
if ( i != 0 ) contentDivs[id].className = 'tabIcerik hide';
i++;
}
}
Вы выбираете только прямые дочерние элементы вашего tabs
. Вы хотите, чтобы потомки (включая вложенные элементы):
var tabListItems = document.getElementById('tabs').getElementsByTagName('*');
Это выберет все элементы внутри элемента с tabs
ID (включая вложенные li
), а не только первый и второй li
а также ul
.
Следующая проблема - ваш пустой идентификатор для subtab li
. В вашем цикле он попытается установить tabLinks[""]
, что, конечно же, невозможно и сломает остальную часть цикла, когда он попадет в этот элемент. Вам нужно поймать этот случай и исключить его:
var id = getHash1( tabLink.getAttribute('href') );
if (id=="") continue;
И, наконец, у вас есть ошибка отображения в начале, прежде чем какая-либо вкладка будет выбрана. Это связано с тем, что класс tabIcerik
не устанавливается для первого li
если вы не переключитесь на другой элемент, а затем вернетесь к нему. Вы должны либо установить его заранее, либо изменить следующую строку в последнем цикле for
.
if ( i != 0 ) {contentDivs[id].className = 'tabIcerik hide';}
else {contentDivs[id].className = 'tabIcerik';}
element.children
только выбирает прямых потомков, а не вложенных, если я не ошибаюсь. Вы должны получить всех детей рекурсивно.