Я хочу добавить класс активных элементов в свою текущую панель навигации, но в настоящее время борюсь.
Я попробовал метод w3schools, но, возможно, я неправильно его реализовал.
КОД:
// Get the container element
var btnContainer = document.getElementsByClassName("tab");
// Get all buttons with class = "btn" inside the container
var btns = btnContainer.getElementsByClassName("link");
// Loop through the buttons and add the active class to the current/clicked button
for (var i = 0; i < btns.length; i++) {
btns[i].addEventListener("click", function() {
var current = document.getElementsByClassName("active");
current[0].className = current[0].className.replace(" active", "");
this.className += " active";
});
}#navbar {
position: absolute;
text-align: right;
top: 3.5em;
right: 3.5em;
z-index: 2;
}
.tab {
background-color: white;
opacity: 0.3;
height: 3.5em;
width: 0.2em;
margin-bottom: 1em;
}
.tab:hover{
opacity:1;
transition:0.7s ease;
}
.link:hover > .text {
opacity:1;
transition:0.7s ease;
}
.active, .tab:hover {
opacity:1;
transition:0.7s ease;
}
.active, .text:hover > .text {
opacity:1;
transition:0.7s ease;
}<div id = "navbar">
<div class = "tab">
<a class = "link active" href = "#home">
<div class = "text">Home</div>
</a></div>
<div class = "tab">
<a class = "link" href = "#work">
<div class = "text">Work</div>
</a></div>
<div class = "tab">
<a class = "link" href = "#about">
<div class = "text">About</div>
</a></div>
</div>Панель навигации в настоящее время работает, но активного элемента нет. Я бы хотел, чтобы вкладка была непрозрачной: 1, когда она активна.
@CalvinNunes я изменил «getElementById» на «getElementsByClassName», но все равно не работает. Есть идеи?
«активный» вы имеете в виду, наведя курсор на элемент или щелкнув его?
@CalvinNunes Я имею в виду, нажав на нее :)
Почему в комментарии написано 'Получить все кнопки с class = "btn" внутри контейнера', но вместо этого вы получаете те, у которых есть класс «ссылка»?
@PeterKA извините, это код из w3schools



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Во-первых, вам нужно добавить класс в родительский div, а не ссылку, так как это родитель имеет непрозрачность, установленную на 0,3. Теперь я сделал это на jQuery, так как это намного проще. Надеюсь, это не проблема.
$('.link').on('click', function() {
$('.link').parent().removeClass('active');
$(this).parent().addClass('active');
});#navbar {
position: absolute;
text-align: right;
top: 3.5em;
right: 3.5em;
z-index: 2;
}
.tab {
background-color: white;
opacity: 0.3;
height: 3.5em;
width: 0.2em;
margin-bottom: 1em;
}
.tab:hover{
opacity:1;
transition:0.7s ease;
}
.link:hover > .text {
opacity:1;
transition:0.7s ease;
}
.active, .tab:hover {
opacity:1;
transition:0.7s ease;
}
.active, .text:hover > .text {
opacity:1;
transition:0.7s ease;
}<script src = "https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id = "navbar">
<div class = "tab active">
<a class = "link" href = "#home">
<div class = "text">Home</div>
</a></div>
<div class = "tab">
<a class = "link" href = "#work">
<div class = "text">Work</div>
</a></div>
<div class = "tab">
<a class = "link" href = "#about">
<div class = "text">About</div>
</a></div>
</div>Привет, Ален, я только что попробовал этот метод, и мне все еще не повезло, но он работает, когда я запускаю его через ваш фрагмент кода.
Вы добавили библиотеку jQuery в свой проект?
Я сделал! Не уверен, почему есть проблема
Странно :(, а ты кэш в браузере чистил после изменений?
В Javascript вы можете использовать .querySelectorAll():
document.querySelectorAll('.tab .link').forEach(function(ele, idx) {
ele.addEventListener("click", function(e) {
e.preventDefault();
document.querySelectorAll('.tab.active').forEach(ele => ele.classList.remove('active'));
ele.parentNode.classList.toggle('active');
});
});#navbar {
position: absolute;
text-align: right;
top: 3.5em;
right: 3.5em;
z-index: 2;
}
.tab {
background-color: white;
opacity: 0.3;
height: 3.5em;
width: 0.2em;
margin-bottom: 1em;
}
.tab:hover{
opacity:1;
transition:0.7s ease;
}
.link:hover > .text {
opacity:1;
transition:0.7s ease;
}
.active, .tab:hover {
opacity:1;
transition:0.7s ease;
}
.active, .text:hover > .text {
opacity:1;
transition:0.7s ease;
}<div id = "navbar">
<div class = "tab">
<a class = "link active" href = "#home">
<div class = "text">Home</div>
</a></div>
<div class = "tab">
<a class = "link" href = "#work">
<div class = "text">Work</div>
</a></div>
<div class = "tab">
<a class = "link" href = "#about">
<div class = "text">About</div>
</a></div>
</div>Посмотрите быстрое решение jQuery ниже, используя следующие методы:
$(function() {
var links = $('.tab > .link');
links.on('click', function() {
links.removeClass('active').closest('.tab').removeClass('active');
$(this).addClass('active').closest('.tab').addClass('active');
})
.first().click();
});#navbar {
position: absolute;
text-align: right;
top: 3.5em;
right: 3.5em;
z-index: 2;
}
.tab {
background-color: white;
opacity: 0.3;
height: 3.5em;
width: 0.2em;
margin-bottom: 1em;
}
.tab:hover{
opacity:1;
transition:0.7s ease;
}
.link:hover > .text {
opacity:1;
transition:0.7s ease;
}
.active, .tab:hover {
opacity:1;
transition:0.7s ease;
}
.active, .text:hover > .text {
opacity:1;
transition:0.7s ease;
}<script src = "https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id = "navbar">
<div class = "tab">
<a class = "link active" href = "#home">
<div class = "text">Home</div>
</a></div>
<div class = "tab">
<a class = "link" href = "#work">
<div class = "text">Work</div>
</a></div>
<div class = "tab">
<a class = "link" href = "#about">
<div class = "text">About</div>
</a></div>
</div>Привет, Питер, это сработало! - Единственное решение здесь, которое сработало и для меня. Однако теперь он, кажется, начинается с неактивного состояния, когда я хочу, чтобы «Домашняя» страница начиналась активной. «Текст» также не остается активным, только «Вкладка» - Вот код, чтобы вам было легче понять (codepen.io/JustNayWillo/pen/aXpKbb) - Спасибо!
Чтобы сделать Home start off активным, вы можете добавить .first().click(), как показано, или просто добавить класс active к первому элементу .tab в html. Чтобы сделать Text активным, просто внесите показанные изменения .removeClass() и addClass().
tabэто неid, это класс,getElementByIdне подойдет