У меня есть список элементов:Переключить имя класса
<ul id='list'>
<li id='1-i' class='visible'><a href='javascript:return false;' onclick="toggle_class('1-i');">Toggle #1</a></li>
<li id='2-i' class='visible'><a href='javascript:return false;' onclick="toggle_class('2-i');">Toggle #2</a></li>
<li id='3-i' class='visible'><a href='javascript:return false;' onclick="toggle_class('3-i');">Toggle #3</a></li>
<li id='4-i' class='visible'><a href='javascript:return false;' onclick="toggle_class('4-i');">Toggle #4</a></li>
</ul>
Если щелкнуть один из элементов (т.е. «Переключить # 1»), я хочу имя класса всех других предметов для изменения от видна до невидируется.
Если щелкнуть другой элемент теперь, я хочу, чтобы имя класса этого элемента, чтобы изменить к видимому (при отсутствии эффекта от всех других имен классов, они должны оставаться, как есть)
Простой пример: вы сначала нажали «Toggle # 4», затем «Toggle # 1». Результат должен быть:
<ul id='list'>
<li id='1-i' class='visible'><a href='javascript:return false;' onclick="toggle_class('1-i');">Toggle #1</a></li>
<li id='2-i' class='invisible'><a href='javascript:return false;' onclick="toggle_class('2-i');">Toggle #2</a></li>
<li id='3-i' class='invisible'><a href='javascript:return false;' onclick="toggle_class('3-i');">Toggle #3</a></li>
<li id='4-i' class='visible'><a href='javascript:return false;' onclick="toggle_class('4-i');">Toggle #4</a></li>
</ul>
Я попытался написать функцию JS, но поведение отличается от того, что я ожидал:
var firstrun = true;
function toggle_class(id) {
var thisElem = document.getElementById(id);
var invisible = "invisible";
var visible = "visible";
if (thisElem.className == 'invisible' && !firstrun) {
thisElem.className = thisElem.className.replace(invisible, visible);
} else {
thisElem.className = thisElem.className.replace(visible, invisible);
}
if (firstrun) {
var children = document.getElementsByClassName('visible');
for (var i = 0; i < children.length; i++) {
if (children[i].id != id) {
children[i].className = thisElem.className.replace(visible, invisible);
}
}
}
firstrun = false;
}
На первом щелчке, выбранный элемент меняет свой класс невидимого, и каждый второй элемент в списке. Я не понимаю, почему это происходит. Что мне нужно изменить в коде, чтобы он работал?
предположение относительно того, почему оно было downvoted: 1. Он использует JQuery, несмотря на то, что ОП не упоминается ничего о JQuery. 2. Он не работает, как запрошенный OP (изменение первого клика, кроме щелчка, изменение 2-го клика только щелчком элемента) – Mackan