8

I've googled around and found many scripts for hiding and showing DIV contents, as a toggle on button click.

But they are work using ID's.

I would like to do the same thing BUT I want to use a class instead of an id so that if I want to have 20 DIV's that toggle ... Hide / Show I don't have to add extra code.

Here is some code:

<script language="javascript"> 
function toggle() {
    var ele = document.getElementById("toggleText");
    var text = document.getElementById("displayText");
    if(ele.style.display == "block") {
            ele.style.display = "none";
        text.innerHTML = "show";
    }
    else {
        ele.style.display = "block";
        text.innerHTML = "hide";
    }
} 
</script>

<a id="displayText" href="javascript:toggle();">show</a> <== click Here
<div id="toggleText" style="display: none"><h1>peek-a-boo</h1></div>

Can anyone help with this please?

Thanks

3
  • what code do you have so far? Commented Apr 29, 2011 at 19:52
  • 1
    It's the same as with an id except an id is designated by "#" and a class is designated by a "." Commented Apr 29, 2011 at 19:53
  • Do you want ALL tags to toggle simultaneously? Or each individually with a generic class to group them under? Commented Dec 8, 2013 at 16:56

8 Answers 8

15

Is jquery an option? Hopefully so, because this does what you want:

http://api.jquery.com/toggle/

$(".class").toggle();
or
$(".class").show();  $(".class").hide();
4

Most of the jQuery answers should be pretty easy, but seeing as your example is in regular JS, here's how to do it in JS.

Potential downside: browsers that don't support getElementsByTagName. I tested IE7 and it works, but I'm not sure about lower.

var divs = document.getElementsByTagName('div');

var toggle = function() {    
    for (var i = 0, l = divs.length; i < l; i++) {
        if (divs[i].getAttribute('class') == 'problem') 
            if (divs[i].style.display == 'none') divs[i].style.display = '';
            else divs[i].style.display = 'none';
    }
}

document.getElementById('Toggle').onclick = toggle;

Try it out: http://jsfiddle.net/robert/PkHYf/

4

As others have said several times, this is easy in jQuery using a jquery selector and the .hide method. However, since you are asking in a general sense and it is a good idea to know how to do it without a framework, that isn't a complete answer.

Here are your options:

  1. JQuery Method. Just use jQuery selectors and the .hide() method.

    $(".CLASSNAME").hide()

  2. Vanilla JS: Dynamic CSS. One approach is to dynamically append stylesheets to the document head -- you can Alter CSS class attributes with javascript?

  3. Vanilla JS: Modify CSS directly:

        var ss = document.styleSheets;
        for (var i=0; i<ss.length; i++) {
            var rules = ss[i].cssRules || ss[i].rules;
    
            for (var j=0; j<rules.length; j++) {
                if (rules[j].selectorText === ".classname") {
                    rules[j].style.visibility = "none";
                }
            }
        }
    
2

Wouldn't this just be

$('.classname').hide();

Or group all the elements you want to hide within a container div, and then hide that div.

2

Using jQuery:

$(".classname").hide();

where classname is the name of the class.

1

You could simply use $(".className").hide();

The $(".somthing") do the same as $("#somthing"), except it's for a class instead of an ID.

1

Using jQuery Selectors, you can find an ID by:

$("#id")

Changing that to select classes is trivial:

$(".className")

Without using jQuery its a little more non-trivial, but you can check this SO question for some help:

How to getElementByClass instead of GetElementById with Javascript?

0

This is a great solution to this for Vanilla JS:

https://attacomsian.com/blog/javascript-hide-show-elements-using-css-class

Add/remove a .hidden css class.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.