Как изменить стрелки в bootstrap аккордеоне? - PullRequest
1 голос
/ 14 июля 2020

Я написал несколько JavaScript и попытался заменить класс всякий раз, когда элемент aria-extended имеет значение true или false, но, похоже, ничего не происходит. Первая карточка открывается при загрузке страницы, потому что aria-extended = "true". Я хочу найти способ заменить класс всякий раз, когда изменяется значение расширенного элемента aria. Я новичок в jQuery и веб-разработке, поэтому приветствую всю вашу помощь. Edit - я использовал аккордеон bootstrap, чтобы убедиться, что только один может быть открыт одновременно

<div id="headingOne">
    <h5 class="card-title">
        Or Files
        <a data-toggle="collapse" class="float-right" href="#collapseFiles" 
          role="button" aria-expanded="true" data-target="#collapseFiles" 
          aria-controls="collapseNotes">
            <i class="fas fa-angle-up></i>
        </a>
    </h5>
</div>
<div id="headingTwo">
             <h5 class="card-title">
             Or Notes
                <a data-toggle="collapse" class="float-right" href="#collapseNotes" role="button" aria-expanded="false" data-target="#collapseNotes" aria-controls="collapseNotes">
                        <i class="fas fa-angle-down"></i>
                </a>
              </h5>
  </div>
<div id="headingThree">
             <h5 class="card-title">
             Or Names
                <a data-toggle="collapse" class="float-right" href="#collapseNames" role="button" aria-expanded="false" data-target="#collapseNames" aria-controls="collapseNotes">
                        <i class="fas fa-angle-down"></i>
                </a>
              </h5>
  </div>

, а это jquery.

if ($('a').attr('aria-expanded').val() == 'true') {
    $("a i").attr("class", "fa-angle-down");
} else {
    $("a i").attr("class", "fa-angle-up");
}

Ответы [ 3 ]

0 голосов
/ 14 июля 2020

Попробуйте это: -

$('[data-toggle="collapse"]').on('click', function(){
    if ($(this).attr('aria-expanded') == 'true') {
        $(this).find('i').addClass('fa-angle-up').removeClass('fa-angle-down');
    } else {
        $(this).find('i').addClass('fa-angle-down').removeClass('fa-angle-up');
    }
});
<link href="https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel='stylesheet'>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css">
<script src="https://code.jquery.com/jquery-3.5.1.slim.min.js" ></script>
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/js/bootstrap.min.js"></script>


<div id="headingTwo">
    <h5 class="card-title">
        Or Notes
        <a data-toggle="collapse" class="float-right" href="#collapseNotes" role="button" aria-expanded="false" data-target="#collapseNotes" aria-controls="collapseNotes">
            <i class="fa fa-angle-up"></i>
        </a>
    </h5>
</div>
<div class="collapse" id="collapseNotes">
    Anim pariatur cliche reprehenderit
</div>
0 голосов
/ 14 июля 2020

Я знаю, что вы можете сделать это, используя JavaScript, но у меня есть чистый CSS способ сделать это:

HTML

Я удалил все ненужные атрибуты на тег привязки. Еще убрал fa-angle-down на иконке. Состояние значка будет установлено через CSS.

<div id="headingOne">
    <h5 class="card-title">
        Or Files
        <a data-toggle="collapse" class="float-right" data-target="#collapseFiles">
            <i class="fas"></i>
        </a>
    </h5>
    <div class="card-body">
        <p id="collapseFiles" class="card-text collapse show">
            Some quick example text to build on the card title and make up the bulk of 
            the card's content.
        </p>
    </div>
</div>
<div id="headingTwo">
    <h5 class="card-title">
        Or Notes
        <a data-toggle="collapse" class="float-right" data-target="#collapseNotes">
            <i class="fas"></i>
        </a>
    </h5>
    <div class="card-body">
        <p id="collapseNotes" class="card-text collapse show">
            Some quick example text to build on the card title and make up the bulk of 
            the card's content.
        </p>
    </div>
</div>
<div id="headingThree">
    <h5 class="card-title">
        Or Name
        <a data-toggle="collapse" class="float-right" data-target="#collapseNames">
            <i class="fas"></i>
        </a>
    </h5>
    <div  class="card-body">
        <p id="collapseNames" class="card-text collapse show">
            Some quick example text to build on the card title and make up the bulk of 
            the card's content.
        </p>
    </div>
</div>

CSS

Вы можете написать CSS для таргетинга на любой тег привязки, имеющий атрибут data-toggle="collapse". Когда он сворачивается, Bootstraps добавляет класс .collapsed, чтобы вы могли использовать его для соответствующего стиля значка.

a[data-toggle="collapse"] i.fas:before {
    content: "\f107";    /* angle-down */
}

a[data-toggle="collapse"].collapsed i.fas:before {
    content: "\f106";    /* angle-up */
}

Снимки экрана

enter image description here

enter image description here

Fiddle Demo

https://jsfiddle.net/davidliang2008/og1t8ksj/26/

0 голосов
/ 14 июля 2020

Вам нужно использовать события, чтобы поймать изменение, например https://api.jquery.com/on/

...