Multiple show and hide buttons












0















I want my show more and hide button to work for multiple text contents, now it's only working for one of them. I have 12 different texts that I want to be able to show and hide with 12 different buttons, like the one in my code. How do I do this?






var content = document.getElementById("content");
var button = document.getElementById("show-more");

button.onclick = function() {

if (content.className == "open") {
//shrink the box
content.className = "";
button.innerHTML = "Läs mer";
} else {
//expand the box
content.className = "open";
button.innerHTML = "Dölj";
}

};

<div id="content">
Test
</div>

<a id="show-more">Läs mer</a>












share|improve this question

























  • Please provide a Minimal, Complete, and Verifiable demo that reproduces the problem. I also suggest translating everything to English, as most StackOverflow users will not understand a specific other language.

    – Daan
    Nov 27 '18 at 10:35








  • 1





    Don't use id for elements that aren't unique to the page. That's what classes are for.

    – Chris G
    Nov 27 '18 at 10:38











  • @PeterB That is very bad practice. Working jQuery example: jsfiddle.net/khrismuc/bry7wsLd

    – Chris G
    Nov 27 '18 at 10:46


















0















I want my show more and hide button to work for multiple text contents, now it's only working for one of them. I have 12 different texts that I want to be able to show and hide with 12 different buttons, like the one in my code. How do I do this?






var content = document.getElementById("content");
var button = document.getElementById("show-more");

button.onclick = function() {

if (content.className == "open") {
//shrink the box
content.className = "";
button.innerHTML = "Läs mer";
} else {
//expand the box
content.className = "open";
button.innerHTML = "Dölj";
}

};

<div id="content">
Test
</div>

<a id="show-more">Läs mer</a>












share|improve this question

























  • Please provide a Minimal, Complete, and Verifiable demo that reproduces the problem. I also suggest translating everything to English, as most StackOverflow users will not understand a specific other language.

    – Daan
    Nov 27 '18 at 10:35








  • 1





    Don't use id for elements that aren't unique to the page. That's what classes are for.

    – Chris G
    Nov 27 '18 at 10:38











  • @PeterB That is very bad practice. Working jQuery example: jsfiddle.net/khrismuc/bry7wsLd

    – Chris G
    Nov 27 '18 at 10:46
















0












0








0








I want my show more and hide button to work for multiple text contents, now it's only working for one of them. I have 12 different texts that I want to be able to show and hide with 12 different buttons, like the one in my code. How do I do this?






var content = document.getElementById("content");
var button = document.getElementById("show-more");

button.onclick = function() {

if (content.className == "open") {
//shrink the box
content.className = "";
button.innerHTML = "Läs mer";
} else {
//expand the box
content.className = "open";
button.innerHTML = "Dölj";
}

};

<div id="content">
Test
</div>

<a id="show-more">Läs mer</a>












share|improve this question
















I want my show more and hide button to work for multiple text contents, now it's only working for one of them. I have 12 different texts that I want to be able to show and hide with 12 different buttons, like the one in my code. How do I do this?






var content = document.getElementById("content");
var button = document.getElementById("show-more");

button.onclick = function() {

if (content.className == "open") {
//shrink the box
content.className = "";
button.innerHTML = "Läs mer";
} else {
//expand the box
content.className = "open";
button.innerHTML = "Dölj";
}

};

<div id="content">
Test
</div>

<a id="show-more">Läs mer</a>








var content = document.getElementById("content");
var button = document.getElementById("show-more");

button.onclick = function() {

if (content.className == "open") {
//shrink the box
content.className = "";
button.innerHTML = "Läs mer";
} else {
//expand the box
content.className = "open";
button.innerHTML = "Dölj";
}

};

<div id="content">
Test
</div>

<a id="show-more">Läs mer</a>





var content = document.getElementById("content");
var button = document.getElementById("show-more");

button.onclick = function() {

if (content.className == "open") {
//shrink the box
content.className = "";
button.innerHTML = "Läs mer";
} else {
//expand the box
content.className = "open";
button.innerHTML = "Dölj";
}

};

<div id="content">
Test
</div>

<a id="show-more">Läs mer</a>






javascript






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Nov 27 '18 at 10:38









Chris G

6,30221021




6,30221021










asked Nov 27 '18 at 10:33









Linnéa BengtssonLinnéa Bengtsson

336




336













  • Please provide a Minimal, Complete, and Verifiable demo that reproduces the problem. I also suggest translating everything to English, as most StackOverflow users will not understand a specific other language.

    – Daan
    Nov 27 '18 at 10:35








  • 1





    Don't use id for elements that aren't unique to the page. That's what classes are for.

    – Chris G
    Nov 27 '18 at 10:38











  • @PeterB That is very bad practice. Working jQuery example: jsfiddle.net/khrismuc/bry7wsLd

    – Chris G
    Nov 27 '18 at 10:46





















  • Please provide a Minimal, Complete, and Verifiable demo that reproduces the problem. I also suggest translating everything to English, as most StackOverflow users will not understand a specific other language.

    – Daan
    Nov 27 '18 at 10:35








  • 1





    Don't use id for elements that aren't unique to the page. That's what classes are for.

    – Chris G
    Nov 27 '18 at 10:38











  • @PeterB That is very bad practice. Working jQuery example: jsfiddle.net/khrismuc/bry7wsLd

    – Chris G
    Nov 27 '18 at 10:46



















Please provide a Minimal, Complete, and Verifiable demo that reproduces the problem. I also suggest translating everything to English, as most StackOverflow users will not understand a specific other language.

– Daan
Nov 27 '18 at 10:35







Please provide a Minimal, Complete, and Verifiable demo that reproduces the problem. I also suggest translating everything to English, as most StackOverflow users will not understand a specific other language.

– Daan
Nov 27 '18 at 10:35






1




1





Don't use id for elements that aren't unique to the page. That's what classes are for.

– Chris G
Nov 27 '18 at 10:38





Don't use id for elements that aren't unique to the page. That's what classes are for.

– Chris G
Nov 27 '18 at 10:38













@PeterB That is very bad practice. Working jQuery example: jsfiddle.net/khrismuc/bry7wsLd

– Chris G
Nov 27 '18 at 10:46







@PeterB That is very bad practice. Working jQuery example: jsfiddle.net/khrismuc/bry7wsLd

– Chris G
Nov 27 '18 at 10:46














4 Answers
4






active

oldest

votes


















0














Hej Linnéa!



IDs should be unique, and if you want multiple occurrences of something, you should use class names.



What I would do is to wrap the links inside of the container divs;



<div class="content">
Content
<a class="toggle" href="#">Läs mer</a>
</div>
<div class="content">
Content
<a class="toggle" href="#">Läs mer</a>
</div>


Then, instead of attaching your event listener to each anchor element, take advantage of event propagation, and add a listener to each content wrapper instead;



document.querySelectorAll('.content').forEach(function(contentDiv) {
contentDiv.onclick = function(e) {
if(e.target.classList.contains('toggle')) {
e.target.innerHTML = e.currentTarget.classList.contains('open') ? 'Dölj' : 'Läs mer';
e.currentTarget.classList.toggle('open');
}
}
});





share|improve this answer
























  • Thank you so much! :)

    – Linnéa Bengtsson
    Nov 27 '18 at 15:06



















0














It is better to use class than id. I have implemented simple snippet where you can design using just class names.






var content = document.getElementById("content");

$(".showHide").on("click", function() {
$(this).parent().find(".more").toggle();
if ($(this).parent().find(".more").is(":visible")) {
$(this).text("Show less");
} else {
$(this).text("Show more");
}
});

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="content">
<div class="text">
First text1
<div style="display:none;" class="more">Other text 1</div>
<a class="showHide" href="#">Show more</a>
</div>
<hr />
<div class="text">
First text2
<div style="display:none;" class="more">Other text 2</div>
<a class="showHide" href="#">Show more</a>
</div>
</div>








share|improve this answer

































    0














    Use document querySelectorAll






    var content = Array.from(document.querySelectorAll(".container"));

    content.forEach(function(el){
    //var content= el.querySelector(".content");
    var button = el.querySelector(".show-more");
    button.addEventListener("click", function () {
    el.classList.toggle("open");
    el.classList.contains("open") ? (button.innerHTML = "Dölj") : (button.innerHTML = "Läs mer");

    }, false)
    });

    .container .content{display: none}
    .container.open .content{display: block}

    <section>
    <article class="container">
    <p>Lorem Ipsum is simply dummy</p>
    <p class="content">Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s</p>
    <a class="show-more">Läs mer</a>
    </article>

    <article class="container">
    <p>Lorem Ipsum is simply dummy</p>
    <p class="content">Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s</p>
    <a class="show-more">Läs mer</a>
    </article>

    <article class="container">
    <p>Lorem Ipsum is simply dummy</p>
    <p class="content">Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s</p>
    <a class="show-more">Läs mer</a>
    </article>

    <article class="container">
    <p>Lorem Ipsum is simply dummy</p>
    <p class="content">Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s</p>
    <a class="show-more">Läs mer</a>
    </article>

    </section>








    share|improve this answer

































      0














      You can make it work for multiple paragraphs if you use classes for all elements, and then process it from there as element pairs (div + corresponding button).



      I deliberately kept everything as much as possible the same as your original code, so it would be easy to understand the changes. And I added some 'hidden' content so you really see something happening.






      var contentDivs = document.getElementsByClassName("content");
      var buttons = document.getElementsByClassName("show-more");

      for (var i = 0; i < contentDivs.length; i++) {
      // "let" creates locally scoped variables for use in the function.
      let div = contentDivs[i];
      let button = buttons[i];
      button.onclick = function() {
      if (div.className == "open") {
      //shrink the box
      div.className = "content";
      button.innerHTML = "Read more";
      } else {
      //expand the box
      div.className = "open";
      button.innerHTML = "Close";
      }
      };
      }

      div, a { font-size: 14px; }
      .content { overflow: hidden; max-height: 18px }

      <div class="content">
      Div 1<br />.....<br />.....<br />.....
      </div>
      <a class="show-more">Read more</a>
      <hr size="1">

      <div class="content">
      Div 2<br />.....<br />.....<br />.....
      </div>
      <a class="show-more">Read more</a>
      <hr size="1">








      share|improve this answer























        Your Answer






        StackExchange.ifUsing("editor", function () {
        StackExchange.using("externalEditor", function () {
        StackExchange.using("snippets", function () {
        StackExchange.snippets.init();
        });
        });
        }, "code-snippets");

        StackExchange.ready(function() {
        var channelOptions = {
        tags: "".split(" "),
        id: "1"
        };
        initTagRenderer("".split(" "), "".split(" "), channelOptions);

        StackExchange.using("externalEditor", function() {
        // Have to fire editor after snippets, if snippets enabled
        if (StackExchange.settings.snippets.snippetsEnabled) {
        StackExchange.using("snippets", function() {
        createEditor();
        });
        }
        else {
        createEditor();
        }
        });

        function createEditor() {
        StackExchange.prepareEditor({
        heartbeatType: 'answer',
        autoActivateHeartbeat: false,
        convertImagesToLinks: true,
        noModals: true,
        showLowRepImageUploadWarning: true,
        reputationToPostImages: 10,
        bindNavPrevention: true,
        postfix: "",
        imageUploader: {
        brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
        contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
        allowUrls: true
        },
        onDemand: true,
        discardSelector: ".discard-answer"
        ,immediatelyShowMarkdownHelp:true
        });


        }
        });














        draft saved

        draft discarded


















        StackExchange.ready(
        function () {
        StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53497697%2fmultiple-show-and-hide-buttons%23new-answer', 'question_page');
        }
        );

        Post as a guest















        Required, but never shown

























        4 Answers
        4






        active

        oldest

        votes








        4 Answers
        4






        active

        oldest

        votes









        active

        oldest

        votes






        active

        oldest

        votes









        0














        Hej Linnéa!



        IDs should be unique, and if you want multiple occurrences of something, you should use class names.



        What I would do is to wrap the links inside of the container divs;



        <div class="content">
        Content
        <a class="toggle" href="#">Läs mer</a>
        </div>
        <div class="content">
        Content
        <a class="toggle" href="#">Läs mer</a>
        </div>


        Then, instead of attaching your event listener to each anchor element, take advantage of event propagation, and add a listener to each content wrapper instead;



        document.querySelectorAll('.content').forEach(function(contentDiv) {
        contentDiv.onclick = function(e) {
        if(e.target.classList.contains('toggle')) {
        e.target.innerHTML = e.currentTarget.classList.contains('open') ? 'Dölj' : 'Läs mer';
        e.currentTarget.classList.toggle('open');
        }
        }
        });





        share|improve this answer
























        • Thank you so much! :)

          – Linnéa Bengtsson
          Nov 27 '18 at 15:06
















        0














        Hej Linnéa!



        IDs should be unique, and if you want multiple occurrences of something, you should use class names.



        What I would do is to wrap the links inside of the container divs;



        <div class="content">
        Content
        <a class="toggle" href="#">Läs mer</a>
        </div>
        <div class="content">
        Content
        <a class="toggle" href="#">Läs mer</a>
        </div>


        Then, instead of attaching your event listener to each anchor element, take advantage of event propagation, and add a listener to each content wrapper instead;



        document.querySelectorAll('.content').forEach(function(contentDiv) {
        contentDiv.onclick = function(e) {
        if(e.target.classList.contains('toggle')) {
        e.target.innerHTML = e.currentTarget.classList.contains('open') ? 'Dölj' : 'Läs mer';
        e.currentTarget.classList.toggle('open');
        }
        }
        });





        share|improve this answer
























        • Thank you so much! :)

          – Linnéa Bengtsson
          Nov 27 '18 at 15:06














        0












        0








        0







        Hej Linnéa!



        IDs should be unique, and if you want multiple occurrences of something, you should use class names.



        What I would do is to wrap the links inside of the container divs;



        <div class="content">
        Content
        <a class="toggle" href="#">Läs mer</a>
        </div>
        <div class="content">
        Content
        <a class="toggle" href="#">Läs mer</a>
        </div>


        Then, instead of attaching your event listener to each anchor element, take advantage of event propagation, and add a listener to each content wrapper instead;



        document.querySelectorAll('.content').forEach(function(contentDiv) {
        contentDiv.onclick = function(e) {
        if(e.target.classList.contains('toggle')) {
        e.target.innerHTML = e.currentTarget.classList.contains('open') ? 'Dölj' : 'Läs mer';
        e.currentTarget.classList.toggle('open');
        }
        }
        });





        share|improve this answer













        Hej Linnéa!



        IDs should be unique, and if you want multiple occurrences of something, you should use class names.



        What I would do is to wrap the links inside of the container divs;



        <div class="content">
        Content
        <a class="toggle" href="#">Läs mer</a>
        </div>
        <div class="content">
        Content
        <a class="toggle" href="#">Läs mer</a>
        </div>


        Then, instead of attaching your event listener to each anchor element, take advantage of event propagation, and add a listener to each content wrapper instead;



        document.querySelectorAll('.content').forEach(function(contentDiv) {
        contentDiv.onclick = function(e) {
        if(e.target.classList.contains('toggle')) {
        e.target.innerHTML = e.currentTarget.classList.contains('open') ? 'Dölj' : 'Läs mer';
        e.currentTarget.classList.toggle('open');
        }
        }
        });






        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered Nov 27 '18 at 10:54









        Hein Haraldson BergHein Haraldson Berg

        874817




        874817













        • Thank you so much! :)

          – Linnéa Bengtsson
          Nov 27 '18 at 15:06



















        • Thank you so much! :)

          – Linnéa Bengtsson
          Nov 27 '18 at 15:06

















        Thank you so much! :)

        – Linnéa Bengtsson
        Nov 27 '18 at 15:06





        Thank you so much! :)

        – Linnéa Bengtsson
        Nov 27 '18 at 15:06













        0














        It is better to use class than id. I have implemented simple snippet where you can design using just class names.






        var content = document.getElementById("content");

        $(".showHide").on("click", function() {
        $(this).parent().find(".more").toggle();
        if ($(this).parent().find(".more").is(":visible")) {
        $(this).text("Show less");
        } else {
        $(this).text("Show more");
        }
        });

        <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
        <div id="content">
        <div class="text">
        First text1
        <div style="display:none;" class="more">Other text 1</div>
        <a class="showHide" href="#">Show more</a>
        </div>
        <hr />
        <div class="text">
        First text2
        <div style="display:none;" class="more">Other text 2</div>
        <a class="showHide" href="#">Show more</a>
        </div>
        </div>








        share|improve this answer






























          0














          It is better to use class than id. I have implemented simple snippet where you can design using just class names.






          var content = document.getElementById("content");

          $(".showHide").on("click", function() {
          $(this).parent().find(".more").toggle();
          if ($(this).parent().find(".more").is(":visible")) {
          $(this).text("Show less");
          } else {
          $(this).text("Show more");
          }
          });

          <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
          <div id="content">
          <div class="text">
          First text1
          <div style="display:none;" class="more">Other text 1</div>
          <a class="showHide" href="#">Show more</a>
          </div>
          <hr />
          <div class="text">
          First text2
          <div style="display:none;" class="more">Other text 2</div>
          <a class="showHide" href="#">Show more</a>
          </div>
          </div>








          share|improve this answer




























            0












            0








            0







            It is better to use class than id. I have implemented simple snippet where you can design using just class names.






            var content = document.getElementById("content");

            $(".showHide").on("click", function() {
            $(this).parent().find(".more").toggle();
            if ($(this).parent().find(".more").is(":visible")) {
            $(this).text("Show less");
            } else {
            $(this).text("Show more");
            }
            });

            <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
            <div id="content">
            <div class="text">
            First text1
            <div style="display:none;" class="more">Other text 1</div>
            <a class="showHide" href="#">Show more</a>
            </div>
            <hr />
            <div class="text">
            First text2
            <div style="display:none;" class="more">Other text 2</div>
            <a class="showHide" href="#">Show more</a>
            </div>
            </div>








            share|improve this answer















            It is better to use class than id. I have implemented simple snippet where you can design using just class names.






            var content = document.getElementById("content");

            $(".showHide").on("click", function() {
            $(this).parent().find(".more").toggle();
            if ($(this).parent().find(".more").is(":visible")) {
            $(this).text("Show less");
            } else {
            $(this).text("Show more");
            }
            });

            <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
            <div id="content">
            <div class="text">
            First text1
            <div style="display:none;" class="more">Other text 1</div>
            <a class="showHide" href="#">Show more</a>
            </div>
            <hr />
            <div class="text">
            First text2
            <div style="display:none;" class="more">Other text 2</div>
            <a class="showHide" href="#">Show more</a>
            </div>
            </div>








            var content = document.getElementById("content");

            $(".showHide").on("click", function() {
            $(this).parent().find(".more").toggle();
            if ($(this).parent().find(".more").is(":visible")) {
            $(this).text("Show less");
            } else {
            $(this).text("Show more");
            }
            });

            <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
            <div id="content">
            <div class="text">
            First text1
            <div style="display:none;" class="more">Other text 1</div>
            <a class="showHide" href="#">Show more</a>
            </div>
            <hr />
            <div class="text">
            First text2
            <div style="display:none;" class="more">Other text 2</div>
            <a class="showHide" href="#">Show more</a>
            </div>
            </div>





            var content = document.getElementById("content");

            $(".showHide").on("click", function() {
            $(this).parent().find(".more").toggle();
            if ($(this).parent().find(".more").is(":visible")) {
            $(this).text("Show less");
            } else {
            $(this).text("Show more");
            }
            });

            <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
            <div id="content">
            <div class="text">
            First text1
            <div style="display:none;" class="more">Other text 1</div>
            <a class="showHide" href="#">Show more</a>
            </div>
            <hr />
            <div class="text">
            First text2
            <div style="display:none;" class="more">Other text 2</div>
            <a class="showHide" href="#">Show more</a>
            </div>
            </div>






            share|improve this answer














            share|improve this answer



            share|improve this answer








            edited Nov 27 '18 at 10:59









            Krupesh Kotecha

            2,06811134




            2,06811134










            answered Nov 27 '18 at 10:46









            ShashidharaShashidhara

            463311




            463311























                0














                Use document querySelectorAll






                var content = Array.from(document.querySelectorAll(".container"));

                content.forEach(function(el){
                //var content= el.querySelector(".content");
                var button = el.querySelector(".show-more");
                button.addEventListener("click", function () {
                el.classList.toggle("open");
                el.classList.contains("open") ? (button.innerHTML = "Dölj") : (button.innerHTML = "Läs mer");

                }, false)
                });

                .container .content{display: none}
                .container.open .content{display: block}

                <section>
                <article class="container">
                <p>Lorem Ipsum is simply dummy</p>
                <p class="content">Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s</p>
                <a class="show-more">Läs mer</a>
                </article>

                <article class="container">
                <p>Lorem Ipsum is simply dummy</p>
                <p class="content">Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s</p>
                <a class="show-more">Läs mer</a>
                </article>

                <article class="container">
                <p>Lorem Ipsum is simply dummy</p>
                <p class="content">Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s</p>
                <a class="show-more">Läs mer</a>
                </article>

                <article class="container">
                <p>Lorem Ipsum is simply dummy</p>
                <p class="content">Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s</p>
                <a class="show-more">Läs mer</a>
                </article>

                </section>








                share|improve this answer






























                  0














                  Use document querySelectorAll






                  var content = Array.from(document.querySelectorAll(".container"));

                  content.forEach(function(el){
                  //var content= el.querySelector(".content");
                  var button = el.querySelector(".show-more");
                  button.addEventListener("click", function () {
                  el.classList.toggle("open");
                  el.classList.contains("open") ? (button.innerHTML = "Dölj") : (button.innerHTML = "Läs mer");

                  }, false)
                  });

                  .container .content{display: none}
                  .container.open .content{display: block}

                  <section>
                  <article class="container">
                  <p>Lorem Ipsum is simply dummy</p>
                  <p class="content">Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s</p>
                  <a class="show-more">Läs mer</a>
                  </article>

                  <article class="container">
                  <p>Lorem Ipsum is simply dummy</p>
                  <p class="content">Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s</p>
                  <a class="show-more">Läs mer</a>
                  </article>

                  <article class="container">
                  <p>Lorem Ipsum is simply dummy</p>
                  <p class="content">Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s</p>
                  <a class="show-more">Läs mer</a>
                  </article>

                  <article class="container">
                  <p>Lorem Ipsum is simply dummy</p>
                  <p class="content">Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s</p>
                  <a class="show-more">Läs mer</a>
                  </article>

                  </section>








                  share|improve this answer




























                    0












                    0








                    0







                    Use document querySelectorAll






                    var content = Array.from(document.querySelectorAll(".container"));

                    content.forEach(function(el){
                    //var content= el.querySelector(".content");
                    var button = el.querySelector(".show-more");
                    button.addEventListener("click", function () {
                    el.classList.toggle("open");
                    el.classList.contains("open") ? (button.innerHTML = "Dölj") : (button.innerHTML = "Läs mer");

                    }, false)
                    });

                    .container .content{display: none}
                    .container.open .content{display: block}

                    <section>
                    <article class="container">
                    <p>Lorem Ipsum is simply dummy</p>
                    <p class="content">Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s</p>
                    <a class="show-more">Läs mer</a>
                    </article>

                    <article class="container">
                    <p>Lorem Ipsum is simply dummy</p>
                    <p class="content">Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s</p>
                    <a class="show-more">Läs mer</a>
                    </article>

                    <article class="container">
                    <p>Lorem Ipsum is simply dummy</p>
                    <p class="content">Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s</p>
                    <a class="show-more">Läs mer</a>
                    </article>

                    <article class="container">
                    <p>Lorem Ipsum is simply dummy</p>
                    <p class="content">Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s</p>
                    <a class="show-more">Läs mer</a>
                    </article>

                    </section>








                    share|improve this answer















                    Use document querySelectorAll






                    var content = Array.from(document.querySelectorAll(".container"));

                    content.forEach(function(el){
                    //var content= el.querySelector(".content");
                    var button = el.querySelector(".show-more");
                    button.addEventListener("click", function () {
                    el.classList.toggle("open");
                    el.classList.contains("open") ? (button.innerHTML = "Dölj") : (button.innerHTML = "Läs mer");

                    }, false)
                    });

                    .container .content{display: none}
                    .container.open .content{display: block}

                    <section>
                    <article class="container">
                    <p>Lorem Ipsum is simply dummy</p>
                    <p class="content">Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s</p>
                    <a class="show-more">Läs mer</a>
                    </article>

                    <article class="container">
                    <p>Lorem Ipsum is simply dummy</p>
                    <p class="content">Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s</p>
                    <a class="show-more">Läs mer</a>
                    </article>

                    <article class="container">
                    <p>Lorem Ipsum is simply dummy</p>
                    <p class="content">Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s</p>
                    <a class="show-more">Läs mer</a>
                    </article>

                    <article class="container">
                    <p>Lorem Ipsum is simply dummy</p>
                    <p class="content">Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s</p>
                    <a class="show-more">Läs mer</a>
                    </article>

                    </section>








                    var content = Array.from(document.querySelectorAll(".container"));

                    content.forEach(function(el){
                    //var content= el.querySelector(".content");
                    var button = el.querySelector(".show-more");
                    button.addEventListener("click", function () {
                    el.classList.toggle("open");
                    el.classList.contains("open") ? (button.innerHTML = "Dölj") : (button.innerHTML = "Läs mer");

                    }, false)
                    });

                    .container .content{display: none}
                    .container.open .content{display: block}

                    <section>
                    <article class="container">
                    <p>Lorem Ipsum is simply dummy</p>
                    <p class="content">Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s</p>
                    <a class="show-more">Läs mer</a>
                    </article>

                    <article class="container">
                    <p>Lorem Ipsum is simply dummy</p>
                    <p class="content">Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s</p>
                    <a class="show-more">Läs mer</a>
                    </article>

                    <article class="container">
                    <p>Lorem Ipsum is simply dummy</p>
                    <p class="content">Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s</p>
                    <a class="show-more">Läs mer</a>
                    </article>

                    <article class="container">
                    <p>Lorem Ipsum is simply dummy</p>
                    <p class="content">Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s</p>
                    <a class="show-more">Läs mer</a>
                    </article>

                    </section>





                    var content = Array.from(document.querySelectorAll(".container"));

                    content.forEach(function(el){
                    //var content= el.querySelector(".content");
                    var button = el.querySelector(".show-more");
                    button.addEventListener("click", function () {
                    el.classList.toggle("open");
                    el.classList.contains("open") ? (button.innerHTML = "Dölj") : (button.innerHTML = "Läs mer");

                    }, false)
                    });

                    .container .content{display: none}
                    .container.open .content{display: block}

                    <section>
                    <article class="container">
                    <p>Lorem Ipsum is simply dummy</p>
                    <p class="content">Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s</p>
                    <a class="show-more">Läs mer</a>
                    </article>

                    <article class="container">
                    <p>Lorem Ipsum is simply dummy</p>
                    <p class="content">Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s</p>
                    <a class="show-more">Läs mer</a>
                    </article>

                    <article class="container">
                    <p>Lorem Ipsum is simply dummy</p>
                    <p class="content">Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s</p>
                    <a class="show-more">Läs mer</a>
                    </article>

                    <article class="container">
                    <p>Lorem Ipsum is simply dummy</p>
                    <p class="content">Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s</p>
                    <a class="show-more">Läs mer</a>
                    </article>

                    </section>






                    share|improve this answer














                    share|improve this answer



                    share|improve this answer








                    edited Nov 27 '18 at 11:17

























                    answered Nov 27 '18 at 10:57









                    Gildas.TamboGildas.Tambo

                    16.4k33763




                    16.4k33763























                        0














                        You can make it work for multiple paragraphs if you use classes for all elements, and then process it from there as element pairs (div + corresponding button).



                        I deliberately kept everything as much as possible the same as your original code, so it would be easy to understand the changes. And I added some 'hidden' content so you really see something happening.






                        var contentDivs = document.getElementsByClassName("content");
                        var buttons = document.getElementsByClassName("show-more");

                        for (var i = 0; i < contentDivs.length; i++) {
                        // "let" creates locally scoped variables for use in the function.
                        let div = contentDivs[i];
                        let button = buttons[i];
                        button.onclick = function() {
                        if (div.className == "open") {
                        //shrink the box
                        div.className = "content";
                        button.innerHTML = "Read more";
                        } else {
                        //expand the box
                        div.className = "open";
                        button.innerHTML = "Close";
                        }
                        };
                        }

                        div, a { font-size: 14px; }
                        .content { overflow: hidden; max-height: 18px }

                        <div class="content">
                        Div 1<br />.....<br />.....<br />.....
                        </div>
                        <a class="show-more">Read more</a>
                        <hr size="1">

                        <div class="content">
                        Div 2<br />.....<br />.....<br />.....
                        </div>
                        <a class="show-more">Read more</a>
                        <hr size="1">








                        share|improve this answer




























                          0














                          You can make it work for multiple paragraphs if you use classes for all elements, and then process it from there as element pairs (div + corresponding button).



                          I deliberately kept everything as much as possible the same as your original code, so it would be easy to understand the changes. And I added some 'hidden' content so you really see something happening.






                          var contentDivs = document.getElementsByClassName("content");
                          var buttons = document.getElementsByClassName("show-more");

                          for (var i = 0; i < contentDivs.length; i++) {
                          // "let" creates locally scoped variables for use in the function.
                          let div = contentDivs[i];
                          let button = buttons[i];
                          button.onclick = function() {
                          if (div.className == "open") {
                          //shrink the box
                          div.className = "content";
                          button.innerHTML = "Read more";
                          } else {
                          //expand the box
                          div.className = "open";
                          button.innerHTML = "Close";
                          }
                          };
                          }

                          div, a { font-size: 14px; }
                          .content { overflow: hidden; max-height: 18px }

                          <div class="content">
                          Div 1<br />.....<br />.....<br />.....
                          </div>
                          <a class="show-more">Read more</a>
                          <hr size="1">

                          <div class="content">
                          Div 2<br />.....<br />.....<br />.....
                          </div>
                          <a class="show-more">Read more</a>
                          <hr size="1">








                          share|improve this answer


























                            0












                            0








                            0







                            You can make it work for multiple paragraphs if you use classes for all elements, and then process it from there as element pairs (div + corresponding button).



                            I deliberately kept everything as much as possible the same as your original code, so it would be easy to understand the changes. And I added some 'hidden' content so you really see something happening.






                            var contentDivs = document.getElementsByClassName("content");
                            var buttons = document.getElementsByClassName("show-more");

                            for (var i = 0; i < contentDivs.length; i++) {
                            // "let" creates locally scoped variables for use in the function.
                            let div = contentDivs[i];
                            let button = buttons[i];
                            button.onclick = function() {
                            if (div.className == "open") {
                            //shrink the box
                            div.className = "content";
                            button.innerHTML = "Read more";
                            } else {
                            //expand the box
                            div.className = "open";
                            button.innerHTML = "Close";
                            }
                            };
                            }

                            div, a { font-size: 14px; }
                            .content { overflow: hidden; max-height: 18px }

                            <div class="content">
                            Div 1<br />.....<br />.....<br />.....
                            </div>
                            <a class="show-more">Read more</a>
                            <hr size="1">

                            <div class="content">
                            Div 2<br />.....<br />.....<br />.....
                            </div>
                            <a class="show-more">Read more</a>
                            <hr size="1">








                            share|improve this answer













                            You can make it work for multiple paragraphs if you use classes for all elements, and then process it from there as element pairs (div + corresponding button).



                            I deliberately kept everything as much as possible the same as your original code, so it would be easy to understand the changes. And I added some 'hidden' content so you really see something happening.






                            var contentDivs = document.getElementsByClassName("content");
                            var buttons = document.getElementsByClassName("show-more");

                            for (var i = 0; i < contentDivs.length; i++) {
                            // "let" creates locally scoped variables for use in the function.
                            let div = contentDivs[i];
                            let button = buttons[i];
                            button.onclick = function() {
                            if (div.className == "open") {
                            //shrink the box
                            div.className = "content";
                            button.innerHTML = "Read more";
                            } else {
                            //expand the box
                            div.className = "open";
                            button.innerHTML = "Close";
                            }
                            };
                            }

                            div, a { font-size: 14px; }
                            .content { overflow: hidden; max-height: 18px }

                            <div class="content">
                            Div 1<br />.....<br />.....<br />.....
                            </div>
                            <a class="show-more">Read more</a>
                            <hr size="1">

                            <div class="content">
                            Div 2<br />.....<br />.....<br />.....
                            </div>
                            <a class="show-more">Read more</a>
                            <hr size="1">








                            var contentDivs = document.getElementsByClassName("content");
                            var buttons = document.getElementsByClassName("show-more");

                            for (var i = 0; i < contentDivs.length; i++) {
                            // "let" creates locally scoped variables for use in the function.
                            let div = contentDivs[i];
                            let button = buttons[i];
                            button.onclick = function() {
                            if (div.className == "open") {
                            //shrink the box
                            div.className = "content";
                            button.innerHTML = "Read more";
                            } else {
                            //expand the box
                            div.className = "open";
                            button.innerHTML = "Close";
                            }
                            };
                            }

                            div, a { font-size: 14px; }
                            .content { overflow: hidden; max-height: 18px }

                            <div class="content">
                            Div 1<br />.....<br />.....<br />.....
                            </div>
                            <a class="show-more">Read more</a>
                            <hr size="1">

                            <div class="content">
                            Div 2<br />.....<br />.....<br />.....
                            </div>
                            <a class="show-more">Read more</a>
                            <hr size="1">





                            var contentDivs = document.getElementsByClassName("content");
                            var buttons = document.getElementsByClassName("show-more");

                            for (var i = 0; i < contentDivs.length; i++) {
                            // "let" creates locally scoped variables for use in the function.
                            let div = contentDivs[i];
                            let button = buttons[i];
                            button.onclick = function() {
                            if (div.className == "open") {
                            //shrink the box
                            div.className = "content";
                            button.innerHTML = "Read more";
                            } else {
                            //expand the box
                            div.className = "open";
                            button.innerHTML = "Close";
                            }
                            };
                            }

                            div, a { font-size: 14px; }
                            .content { overflow: hidden; max-height: 18px }

                            <div class="content">
                            Div 1<br />.....<br />.....<br />.....
                            </div>
                            <a class="show-more">Read more</a>
                            <hr size="1">

                            <div class="content">
                            Div 2<br />.....<br />.....<br />.....
                            </div>
                            <a class="show-more">Read more</a>
                            <hr size="1">






                            share|improve this answer












                            share|improve this answer



                            share|improve this answer










                            answered Nov 27 '18 at 11:53









                            Peter BPeter B

                            13.3k52044




                            13.3k52044






























                                draft saved

                                draft discarded




















































                                Thanks for contributing an answer to Stack Overflow!


                                • Please be sure to answer the question. Provide details and share your research!

                                But avoid



                                • Asking for help, clarification, or responding to other answers.

                                • Making statements based on opinion; back them up with references or personal experience.


                                To learn more, see our tips on writing great answers.




                                draft saved


                                draft discarded














                                StackExchange.ready(
                                function () {
                                StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53497697%2fmultiple-show-and-hide-buttons%23new-answer', 'question_page');
                                }
                                );

                                Post as a guest















                                Required, but never shown





















































                                Required, but never shown














                                Required, but never shown












                                Required, but never shown







                                Required, but never shown

































                                Required, but never shown














                                Required, but never shown












                                Required, but never shown







                                Required, but never shown







                                Popular posts from this blog

                                A CLEAN and SIMPLE way to add appendices to Table of Contents and bookmarks

                                Calculate evaluation metrics using cross_val_predict sklearn

                                Insert data from modal to MySQL (multiple modal on website)