Как использовать document.getElementsByClassName

javascript html css

394 просмотра

1 ответ

У меня 2 вопроса

  1. Пожалуйста, помогите мне понять JavaScript для создания аккордеонного меню, которое я получил от W3Schools

CSS

    <style>
button.accordion_f {
    background-color: #eee;
    color: #444;
    cursor: pointer;
    padding: 14px;
    width: 100%;
    border: none;
    text-align: left;
    outline: none;
    font-size: 15px;
    transition: 0.4s;
}

button.accordion_f.active, button.accordion_f:hover {
    background-color: #ddd;
    color: blue;
}

button.accordion_f:after {
    content: '\02795';
    font-size: 13px;
    color: #777;
    float: right;       
    margin-left: 5px;  
}

button.accordion_f.active:after {
    color: blue;
    content: "\2796";
}

div.panel {
    padding: 0 14px;
    background-color: white;
    max-height: 0;
    overflow: hidden;
    transition: 0.3s ease-in-out;
    opacity: 0;
}

div.panel.show {
    opacity: 1;
    max-height: 6000px;  
}
</style> 

JavaScript

<script>
var acc = document.getElementsByClassName("accordion_f");
var i;

for (i = 0; i < acc.length; i++) {
    acc[i].onclick = function(){
    this.classList.toggle("active");
    this.nextElementSibling.classList.toggle("show");       
    }
}
</script>

Пример использования

<button class="accordion_f">3rd party compatibility</button>
<div class="panel">
<p>Offers an easy way to connect your Polar training device with 3<sup>rd</sup> party services.</p>
</div>

Это работает правильно

Если я инкапсулирую это в другом классе, например, в меню пилюль, оно не развернет меню, кажется, что css работает, затенение фона и т. Д., Когда я проверяю элемент, который не вижу сценария, это родительский класс, влияющий на документ. getElementsByClassName как-нибудь?

<ul class="tabs">
<button class="accordion_f">3rd party compatibility</button>
<div class="panel">
<p>Offers an easy way to connect your Polar training device with 3<sup>rd</sup> party services.</p>
</div>
</ul>
  1. Как поместить мой скрипт в функцию и вызвать его с помощью onclick или onmouseover?

Я пытался:

<button class="accordion_f" onmouseover="accordion_menu()">Activity</button>
<div class="panel">
<p>Tracks your daily activity at five intensity levels for 24 hours a day, seven days a week, and provides a complete picture of all of your activity. It counts your active time, daily burnt calories, steps, distance from steps and sleep.</p>
</div>

function accordion_menu(){
var acc = document.getElementsByClassName("accordion_f");
var i;

for (i = 0; i < acc.length; i++) {
    acc[i].onclick.classList.toggle("active");        
    acc[i].onclick.nextElementSibling.classList.toggle("show");        
 }
} 

Это просто открыло все панели с классом accordion_f, а не только с активной, как мне хотелось бы.

Автор: hrhsii Источник Размещён: 08.11.2019 10:59

Ответы (1)


-1 плюса

Это работает, IE был в режиме совместимости и ie8 имел плохую поддержку document.getElementsByClassName

Автор: hrhsii Размещён: 24.08.2016 07:33
32x32