всегда принимает первый идентификатор элемента. Как сделать сброс события и взять собственно элемент - PullRequest
1 голос
/ 10 октября 2019

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

jQuery(document).on('show.bs.collapse', function() {

    var childIdStr = jQuery(this).children().find('i').attr('id');
    var myId = "#" + childIdStr;

    jQuery(myId).removeClass('dashicons-plus');
    jQuery(myId).addClass('dashicons-minus');
});

jQuery(document).on('hide.bs.collapse', function() {
    var childHideIdStr = jQuery(this).children().find('i').attr('id');
    var myId = "#" + childHideIdStr;

    if(jQuery('.collapse').hasClass('show')){
        jQuery(myId).removeClass('dashicons-minus');
        jQuery(myId).addClass('dashicons-plus');
    }    
});
<div id="accoridian" class="mt-5" role="tablist">

    <div class="footer-card">
        <div class="footer-card-header">
            <div class="row">
                <div class="col footer-card-headline">Center</div>
                <div class="col footer-card-icon"><a data-toggle="collapse" href="#collapseOne"><i id="collapse1"
                            class="dashicons dashicons-plus"></i></a></div>
            </div>
        </div>

        <div id="collapseOne" class="collapse">
            <div class="card-body footer-card-body">
                <p>Aalykkevej 1<br />
                    6240 Løgumkloster</p>

                <b class="text-uppercase">Telefon</b>
                <p>74 92 81 18 (hverdage fra 8.00 - 15.00)</p>

                <b class="text-uppercase">E-mail</b>
                <p>hviding.asylsyd@toender.dk</p>
            </div>
        </div>
    </div> <!-- ./footer-card -->

    <!-- Center Hviding -->
    <div class="footer-card mt-2">
        <div class="footer-card-header">
            <div class="row">
                <div class="col footer-card-headline">Center hviding</div>
                <div class="col footer-card-icon"><a data-toggle="collapse" href="#collapseTwo"><i id="collapse2"
                            class="dashicons dashicons-plus"></i></a></div>
            </div>
        </div>

        <div id="collapseTwo" class="collapse">
            <div class="card-body footer-card-body">
                <p>Ribevej<br />
                    6720 Ribe</p>

                <b class="text-uppercase">Telefon</b>
                <p>74 92 93 59 (hverdage fra 8.00 - 15.00)</p>

                <b class="text-uppercase">E-mail</b>
                <p>hviding.asylsyd@toender.dk</p>
            </div>
        </div>
    </div> <!-- ./footer-card -->

Ответы [ 2 ]

1 голос
/ 10 октября 2019

Просто измените ваш сложный JQuery на

jQuery('a[data-toggle="collapse"] i').on('click',function(e){
   $(this).toggleClass('dashicons-plus');
   $(this).toggleClass('dashicons-minus');
});
1 голос
/ 10 октября 2019

Измените JQuery на

jQuery(document).on('show.bs.collapse', function(e) {
   var childIdStr = e.currentTarget.activeElement.firstChild.id;
   var myId = "#" + childIdStr;
   jQuery(myId).removeClass('dashicons-plus');
   jQuery(myId).addClass('dashicons-minus');
});

jQuery(document).on('hide.bs.collapse', function(e) {

   var childHideIdStr = e.currentTarget.activeElement.firstChild.id;
   var myId = "#" + childHideIdStr;

   if(jQuery('.collapse').hasClass('show')){
      jQuery(myId).removeClass('dashicons-minus');
      jQuery(myId).addClass('dashicons-plus');
   }
});
...