0

I have HTML code with cards like this:

        <div class="row">
            <div class="col-md-6 text-center mt-5">
                <div class="card">
                    <div class="card-block">
                      <h4 class="card-title mt-2 mainContent">Title</h4>
                      <p class="card-text text-left p-3 mainContent">Content</p>
                    </div>
                    <div class="card-block expanded">
                        <p class="card-text mainContent">Expanded content</p>
                    </div>
                </div>
            </div>
            <div class="col-md-6 text-center mt-5">
                <div class="card">
                    <div class="card-block">
                        <h4 class="card-title mt-2 mainContent">Title</h4>
                        <p class="card-text text-left p-3 mainContent">Content</p>                    
                    </div>
                    <div class="card-block expanded">
                        <p class="card-text mainContent">Expanded content</p>
                    </div>    
                </div>
            </div>
        </div>

and jQuery script:

        $(document).ready(function(){
            $(".mainContent").click(function(){
                $(".expanded").slideToggle("slow");
            });
        });

I want to slide down expanded content of just one card by one click, but obviously this code slides down all cards. That works if I change code to id, like this:

        <div class="row">
            <div class="col-md-6 text-center mt-5">
                <div class="card">
                    <div class="card-block">
                      <h4 class="card-title mt-2 mainContent" id="mainContent">Title</h4>
                      <p class="card-text text-left p-3 mainContent">Content</p>
                    </div>
                    <div class="card-block expanded" id="expanded">
                        <p class="card-text mainContent">Expanded content</p>
                    </div>
                </div>
            </div>
            <div class="col-md-6 text-center mt-5">
                <div class="card">
                    <div class="card-block">
                        <h4 class="card-title mt-2 mainContent" id="mainContent1">Title</h4>
                        <p class="card-text text-left p-3 mainContent" id="mainContent1">Content</p>                    
                    </div>
                    <div class="card-block expanded" id="expanded1">
                        <p class="card-text mainContent" id="mainContent1">Expanded content</p>
                    </div>    
                </div>
            </div>
        </div>
        
        <script>
        $(document).ready(function(){
            $("#mainContent").click(function(){
                $("#expanded").slideToggle("slow");
            });
            $("#mainContent1").click(function(){
                $("#expanded1").slideToggle("slow");
            });
        });
        </script>

That code isn't efficient, because there will be more cards, so I will have to copy the same code. How to shorten this code?

isherwood
  • 52,576
  • 15
  • 105
  • 143
  • Accordion structures have been discussed on this site hundreds of times. Did you search? Short answer: use DOM traversal (`closest()`). – isherwood Mar 22 '22 at 13:17

0 Answers0