I never expected it, but one of the most popular (most commented) posts on this blog is a javascript post from about 3 years ago. I was showing how to hide and show elements on a web page with some simple javascript using getElementById and altering the display or visibility attributes of the element. It still works – although I hear every once in a while that certain browsers have issues with is sometimes, but the truth is I haven’t used this code almost since I wrote it. I have converted to jQuery! And it is much easier to code, easier to read and even nicer to browsers. So I’m writing this update post to proclaim the antiquity (3 years on the internet is a long time) of getElementById and the benefits of jQuery!
There isn’t much more to say about it really. I hope you’ve heard of jquery and if not, please go check it out it’s pretty easy to pick up! One thing I will mention is the potential bloat to having to load a javascript library. But most of my projects lately have included jQuery because I’ve been using it much more than just showing and hiding elements. But remember our friend cache? Remember that if you’re using jQuery on a whole site, the user only loads it once, and if you load it from the google hosted version of jQuery they likely will already have the script in their cache. The current version is hosted at http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js, so just link to that script on your page and you’re free to throw in any jquery onto your page.
Well, check out the code; I hope it’s pretty self explanatory and you can see it in action. I always have to see things work to understand them and learn from them.
Javascript
[cc lang=”javascript”]
$(document).ready(function() {
$(‘.hide_it’).click(function(){ $(‘.to_hide’).hide(); });
$(“.show_it”).click(function () { $(“.to_show”).show(“slow”); });
$(“#toggle_it”).click(function () { $(“.to_toggle”).toggle(); });
$(‘.fade_it’).click(function() { $(“.to_fade”).fadeTo(“slow”,0); });
$(‘.fade_out’).click(function() { $(“.to_fade_out”).fadeOut(); });
$(‘.reset_all’).click(function() {
$(‘.to_hide’).show();
$(“.to_show”).hide();
$(“.to_toggle”).show();
$(“.to_fade”).fadeTo(“slow”,100);
$(“.to_fade_out”).fadeIn();
});
});
[/cc]
HTML Code
see it in action on the demo page
[cc lang=”html”]
testing hide js div
Show me slowly.
testing the toggle functionality of jQuery
testing fade out. you’ll notice that this is set to display:none once the fade is complete.
testing fade to 0. this fades out just as fadeOut, but it does no make the display none, so the page layout isn’t modified, just the visibility of this element.
[/cc]
Notice that with jQuery we can use a class or an id as a selector. This is great because you can show a whole slew of elements that share the same class at once. Remember that you can only have one id on a page at once since it must be unique.
See the demo page for working examples.
And don’t forget to read up on the api for jQuery here jQuery hide, jQuery show, jQuery toggle, jQuery fadeOut, jQuery fadeIn, jQuery fadeTo.
Hey great post!! can i by any chance make the toggle function start as hidden? So when i reload the page u have to toggle to show and then toggle again to hide. The show function would work but then u cant close it again after being read.
Thanks!
@Mikael –
I believe this would do it. It just fired the toggle event on the “.to_toggle” class as the document is ready and then adds the event listener to the button.
[cc lang=”js’]
$(document).ready(function() {
$(“.to_toggle”).toggle();
$(“#toggle_it”).click(function () { $(“.to_toggle”).toggle(); });
});
[/cc]
@Evan
It’d be better to just set the display property to none on the div directly
Works and reduces Javascript usage.
Yes, this technically works.
This javascript really has no stress on browsers. I don’t like inline styles. Plus, I try to only hide content with css, sinceif someone has javascript disabled, then the content is visible, whereas if it’s hidden with css, they user won’t see it (and neither will search engines).
Point Taken. I hadn’t considered Javascript Disabling. Doesn’t matter for me at the moment because the Browsers I’m developing for at the moment are very limited in abilities and can’t disable Javascript. So the less Javascript on my pages the better.