Blog

Using jQuery toggle() to Show and Hide Text
Posted on February 28, 2014 in jQuery by Matt Jennings

HTML

I’m going to use the HTML below to show how to click a Read more… link (also know as the .showhide element in the code below) that will display hidden text. Then, you’ll be able to click the .showhide element again to hide the text displayed.

<h2>jQuery toggle() Examples</h2>

<h3>Why do we dream?</h3>
<a class="showhide" href="#">Read more...</a>
<div class="morearticle">The human brain is a mysterious little ball of gray matter. After all these years, researchers are still baffled by many aspects of how and why it operates like it does.</div>

<h3>Why can't we manufacture water?</h3>
<a class="showhide" href="#">Read more...</a>
<div class="morearticle">Water is becoming an increasingly important issue in the developed world. But this issue is nothing new for other, less developed nations.</div>

jQuery

First, I’ll assign the .showhide selector to a variable named showhide. Then I’ll use var showhidetext = showhide.first().text(); to store the text from the first showhide element into a variable named showhidetext.

Finally I’ll assign the .morearticle selector to a morearticles variable.

By assigning the selectors and text of a selector into variables I’m able to use the DRY programming principal to make the code easier to maintain and possibly faster when referencing the same nodes multiple times in a function.

The hide() method is same as applying a display: none; CSS declaration to the morearticles selector variable, which is the text we want hidden before any links are clicked.

The event.preventDefault(); method prevents the browser from scrolling to the top when you click one of the .showhide elements and a # is added to the URL.

After the showhide element is clicked,the next() method finds the next specified sibling, in this case morearticles selector variable. Finally, the toggle() method applies a display: block; CSS declaration to this morearticles selector variable sibling.

When you click on that same showhide element its morearticles sibling now gets a display: none; CSS declaration to hide the text.

The toggleClass() function adds a .show class to the morearticles selector.

Finally, the if else statement changes the showhide link text to Hide when the morearticles element has a CSS rule of display: block; and back to Read more… when it has a CSS rule of display: none;.

See more options for the toggle() method here. You can find a JSFiddle here.

//Anonymous Function Below for Private variables
(function(){ 

    var showhide = $(".showhide"),
	showhidetext = showhide.first().text(),
	morearticles = $(".morearticle");

    $(morearticles).hide();

    $(showhide).click(function(event){
        event.preventDefault();
        $(this).next(morearticles).toggle("slow").toggleClass("show");

        if($(this).next(morearticles).hasClass("show"))
        {      
            $(this).text("Hide");   
        }
        else
        {
            $(this).text(showhidetext);              
        }

    });    

})();

Leave a Reply