permalink

111

50 jQuery Snippets That Will Help You Become A Better JavaScript Developer

 

 

In today’s post I’m going to show you guys 50 jQuery Snippets that can help you with your JavaScript projects. Some of these snippets are going to be things that have just been supported with jQuery 1.4.2 whilst others are really useful functions or methods that can help you do things better or quicker. I’ve tried to bare in mind optimal performance with these snippets so if there’s anything you see that you think could be done better, please feel free to post your version in the comments!. I hope you find the post useful.

 

 
  • How to Create A Nested Filter:

     //a filter allows you to reduce the set of matched elements
     //to those that match a given selector. In this case the query
     //removes anything which doesn't (:not) have (:has) a child with
     //class "selected" (.selected)
     .filter(":not(:has(.selected))")
    
  • How to Reuse Your Element Searches

    var allItems = $("div.item");
    var keepList = $("div#container1 div.item");
    //Now you can keep working with those jQuery objects. For example,
    //trim down the "keep list" based on checkboxes whose names
    //correspond to
    
    class names: $(formToLookAt + " input:checked").each(function() { keepList = keepList.filter("." + $(this).attr("name")); });
  • How To Check If An Element contains a certain class or element with has():

     //jQuery 1.4.* includes support for the has method. This method will find
     //if a an element contains a certain other element class or whatever it is
     //you are looking for and do anything you want to them.
     $("input").has(".email").addClass("email_icon");
    
  • How to Switch StyleSheets With jQuery:

    	//Look for the media-type you wish to switch then set the href to your new style sheet
    	$('link[media='screen']').attr('href', 'Alternative.css');
  • How to Limit the Scope of Selection (For Optimization):

    		//Where possible, pre-fix your class names with a tag name
    		//so that jQuery doesn't have to spend more time searching
    		//for the element you're after. Also remember that anything
    		//you can do to be more specific about where the element is
    		//on your page will cut down on execution/search times
    		var in_stock = $('#shopping_cart_items input.is_in_stock');
    
    • Item X
    • Item Y
    • Item Z
  • How to Correctly Use ToggleClass:

    	 //Toggle class allows you to add or remove a class
    	 //from an element depending on the presence of that
    	 //class. Where some developers would use:
    	 a.hasClass('blueButton') ? a.removeClass('blueButton') : a.addClass('blueButton');
    	 //toggleClass allows you to easily do this using
    	 a.toggleClass('blueButton');
    
  • How to set an IE Specific Function:

    	if ($.browser.msie) { // Internet Explorer is a sadist. }
    
  • How to Replace an element with jQuery:

    $('#thatdiv').replaceWith('fnuh');
  • How to Verify if an element is empty:

    if ($('#keks').html()) { //Nothing found ;} 
  • How to find out the index of an element in an unordered set

    $("ul > li").click(function () {
        var index = $(this).prevAll().length;
    });
  • How to Bind a function to an event:

    $('#foo').bind('click', function() {
      alert('User clicked on "foo."');
    });
  • How to Append or add HTML to an element:

    $('#lal').append('sometext');
  • How to use an object literal to define properties when creating an element

    	var e = $("", { href: "#", class: "a-class another-class", title: "..." });
    	
  • How to Filter using multiple-attributes

    	//This precision-based approached can be useful when you use
    	//lots of similar input elements which have different types
    	var elements = $('#someid input[type=sometype][value=somevalue]').get();
    	
  • How to Preload images with jQuery:

    	jQuery.preloadImages = function() { for(var i = 0; i').attr('src', arguments[i]); } };
    	// Usage $.preloadImages('image1.gif', '/path/to/image2.png', 'some/image3.jpg');
    	
  • How to set an event handler for any element that matches a selector:

    $('button.someClass').live('click', someFunction);
    	//Note that in jQuery 1.4.2, the delegate and undelegate options have been
    	//introduced to replace live as they offer better support for context
        //For example, in terms of a table where before you would use..
    	// .live()
    	$("table").each(function(){
    	  $("td", this).live("hover", function(){
    		$(this).toggleClass("hover");
    	  });
    	});
    	//Now use..
    	$("table").delegate("td", "hover", function(){
      $(this).toggleClass("hover");
    });
    
  • How to find an option element that’s been selected:

    	$('#someElement').find('option:selected');
    	
  • How to hide an element that contains text of a certain value:

    $("p.value:contains('thetextvalue')").hide();
  • How To AutoScroll to a section of your page:

    jQuery.fn.autoscroll = function(selector) {
      $('html,body').animate(
        {scrollTop: $(selector).offset().top},
        500
      );
    }
    //Then to scroll to the class/area you wish to get to like this:
    $('.area_name').autoscroll();
    
  • How To Detect Any Browser:

    	Detect Safari (if( $.browser.safari)),
    	Detect IE6 and over (if ($.browser.msie && $.browser.version > 6 )),
    	Detect IE6 and below (if ($.browser.msie && $.browser.version <= 6 )),
    	Detect FireFox 2 and above (if ($.browser.mozilla && $.browser.version >= '1.8' ))
  • How To Replace a word in a string:

    var el = $('#id');
    	el.html(el.html().replace(/word/ig, ''));
  • How To Disable right-click contextual menu :

    $(document).bind('contextmenu',function(e){ return false; });
  • How to define a Custom Selector

    	$.expr[':'].mycustomselector = function(element, index, meta, stack){
        // element- is a DOM element
        // index - the current loop index in stack
        // meta - meta data about your selector
        // stack - stack of all elements to loop
        // Return true to include current element
        // Return false to explude current element
    };
    // Custom Selector usage:
    $('.someClasses:test').doSomething();
    
  • How to check if an element exists

    if ($('#someDiv').length) {//hooray!!! it exists...}
  • How to Detect Both Right & Left Mouse-clicks with jQuery:

    $("#someelement").live('click', function(e) {
        if( (!$.browser.msie && e.button == 0) || ($.browser.msie && e.button == 1) ) {
            alert("Left Mouse Button Clicked");
        }
        else if(e.button == 2)
            alert("Right Mouse Button Clicked");
    });
    
  • How To Show or Erase a Default Value In An Input Field:

    //This snippet will show you how to keep a default value
    //in a text input field for when a user hasn't entered in
    //a value to replace it
    swap_val = [];
    $(".swap").each(function(i){
        swap_val[i] = $(this).val();
        $(this).focusin(function(){
            if ($(this).val() == swap_val[i]) {
                $(this).val("");
            }
        }).focusout(function(){
            if ($.trim($(this).val()) == "") {
                $(this).val(swap_val[i]);
            }
        });
    });
    
    
    
  • How To Automatically Hide or Close Elements After An Amount Of Time (supports 1.4):

     //Here's how we used to do it in 1.3.2 using setTimeout
        setTimeout(function() {
      $('.mydiv').hide('blind', {}, 500)
    }, 5000);
    //And here's how you can do it with 1.4 using the delay() feature (this is a lot like sleep)
    $(".mydiv").delay(5000).hide('blind', {}, 500);
     
  • How To Add Dynamically Created Elements to the DOM:

     var newDiv = $('');
    	newDiv.attr('id','myNewDiv').appendTo('body'); 
  • How To Limit The Number Of Characters in a "Text-Area" field:

    	jQuery.fn.maxLength = function(max){
    	this.each(function(){
    		var type = this.tagName.toLowerCase();
    		var inputType = this.type? this.type.toLowerCase() : null;
    		if(type == "input" && inputType == "text" || inputType == "password"){
    			//Apply the standard maxLength
    			this.maxLength = max;
    		}
    		else if(type == "textarea"){
    			this.onkeypress = function(e){
    				var ob = e || event;
    				var keyCode = ob.keyCode;
    				var hasSelection = document.selection? document.selection.createRange().text.length > 0 : this.selectionStart != this.selectionEnd;
    				return !(this.value.length >= max && (keyCode > 50 || keyCode == 32 || keyCode == 0 || keyCode == 13) && !ob.ctrlKey && !ob.altKey && !hasSelection);
    			};
    			this.onkeyup = function(){
    				if(this.value.length > max){
    					this.value = this.value.substring(0,max);
    				}
    			};
    		}
    	});
    };
    //Usage:
    $('#mytextarea').maxLength(500);
    
  • How to create a basic test for a function

    	//Separate tests into modules.
    module("Module B");
    test("some other test", function() {
      //Specify how many assertions are expected to run within a test.
      expect(2);
      //A comparison assertion, equivalent to JUnit's assertEquals.
      equals( true, false, "failing test" );
      equals( true, true, "passing test" );
    });
    
  • How to clone an element in jQuery:

    var cloned = $('#somediv').clone(); 
  • How to test if an element is visible in jQuery:

    if($(element).is(':visible') == 'true') { //The element is Visible } 
  • How to center an element on screen:

    jQuery.fn.center = function () {
    	this.css('position','absolute');
    	this.css('top', ( $(window).height() - this.height() ) / +$(window).scrollTop() + 'px');
    	this.css('left', ( $(window).width() - this.width() ) / 2+$(window).scrollLeft() + 'px');return this;}
    	//Use the above function as: $(element).center(); 
  • How to put the values of all the elements of a particular name into an array:

    	var arrInputValues = new Array();
       $("input[name='table\\[\\]']").each(function(){
         arrInputValues.push($(this).val());
    });
    
  • How to Strip HTML From Your Element

    	(function($) {
        $.fn.stripHtml = function() {
            var regexp = /<("[^"]*"|'[^']*'|[^'">])*>/gi;
            this.each(function() {
                $(this).html(
                    $(this).html().replace(regexp,”")
                );
            });
            return $(this);
        }
    })(jQuery);
    	//usage:
    	$('p').stripHtml();
    
  • How to get a parent element using closest:

    $('#searchBox').closest('div'); 
  • How to log jQuery events using Firebug and Firefox:

    // Allows chainable logging
    // Usage: $('#someDiv').hide().log('div hidden').addClass('someClass');
    jQuery.log = jQuery.fn.log = function (msg) {
          if (console){
             console.log("%s: %o", msg, this);
          }
          return this;
    };
    
  • How to force links to open in a pop-up window:

    	jQuery('a.popup').live('click', function(){
    	newwindow=window.open($(this).attr('href'),'','height=200,width=150');
    	if (window.focus) {newwindow.focus()}
    	return false;
    });
    
  • How to force links to open in a new tab:

    jQuery('a.newTab').live('click', function(){
    	newwindow=window.open($(this).href);
    	jQuery(this).target = "_blank";
    	return false;
    });
    
  • How to select siblings in jQuery using .siblings()

    // Rather than doing this
    $('#nav li').click(function(){
        $('#nav li').removeClass('active');
        $(this).addClass('active');
    });
    // Do this instead
    $('#nav li').click(function(){
        $(this).addClass('active')
            .siblings().removeClass('active');
    });
    	
  • How to Toggle All the checkboxes on a page:

    var tog = false; // or true if they are checked on load
    $('a').click(function() {
        $("input[type=checkbox]").attr("checked",!tog);
        tog = !tog;
    });
    
  • How to filter down a list of elements based on some input text:

    	//If the value of the element matches that of the entered text
    	//it will be returned
    	$('.someClass').filter(function() {
        return $(this).attr('value') == $('input#someId').val() ;
     })
     
  • How to get mouse cursor X and Y

    $(document).mousemove(function(e){
    $(document).ready(function() {
    $().mousemove(function(e){
    $(’#XY’).html(”X Axis : ” + e.pageX + ” | Y Axis ” + e.pageY);
    });
    });
  • How to make an entire List Element (LI) clickable

    $("ul li").click(function(){
      window.location=$(this).find("a").attr("href"); return false;
    });
    
    
    
  • How to Parse XML with jQuery (Basic example):

    function parseXml(xml) {
    	//find every Tutorial and print the author
    	$(xml).find("Tutorial").each(function()
    	{
    	$("#output").append($(this).attr("author") + "");
    	});
    }
    
  • How to Check if an image has been fully loaded:

     $('#theImage').attr('src', 'image.jpg').load(function() {
    alert('This Image Has Been Loaded');
    });
    
  • How to namespace events using jQuery:

    //Events can be namespaced like this
    $('input').bind('blur.validation', function(e){
        // ...
    });
    //The data method also accept namespaces
    $('input').data('validation.isValid', true);
    
  • How to Check if Cookies Are Enabled Or Not:

        var dt = new Date();
        dt.setSeconds(dt.getSeconds() + 60);
        document.cookie = "cookietest=1; expires=" + dt.toGMTString();
        var cookiesEnabled = document.cookie.indexOf("cookietest=") != -1;
        if(!cookiesEnabled)
    	{
            //cookies have not been enabled
        }
    
  • How to Expire A Cookie:

    var date = new Date();
    date.setTime(date.getTime() + (x * 60 * 1000));
    $.cookie('example', 'foo', { expires: date });
    
  • Replace any URL on your page with a clickable link

    $.fn.replaceUrl = function() {
            var regexp = /((ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?)/gi;
            this.each(function() {
                $(this).html(
                    $(this).html().replace(regexp,'$1‘)
                );
            });
            return $(this);
        }
    	//usage
    	$('p').replaceUrl();
    

111 Comments

  1. Pingback: 50 jQuery Snippets That Will Help You Become A Better JavaScript Developer « DesignerLinks

    • Hello Mike. It's really great getting to hear that other coders found this list useful. I hope the snippets come in handy with your projects! :)

  2. As a junior jQuery enthusiast, I have to say some of these, especially the ones in the first half of the list just blew my mind! I knew jQuery made stuff easy but this…this is just ridiculous! Thank for sharing them!

  3. Hi, nice article.

    #9 How to Verify if an element is empty seems wrong to me.
    If I paste
    <code>
    if ($('bodt').html()) console.log('body is empty');
    </code>
    to my firebug console, it will write "body is empty" if the body contains something. You need to negate the expression like this
    <code>
    if (!$('bodt').html()) console.log('body is empty');
    </code>

  4. 3. You use has() for looking inside that given element, instead of checking its own properties. hasClass() would be the right method for your example.

    9. $(elem).children().length or $(elem).is(':empty') are favored.

    10. You can just do .index() now in 1.4 for the same effect.

    19. That autoscroll plugin is fantastic. :) Gotta love it.

    20. I think you want to change the first > to >=

    28. I think wordpress mighta eaten your HTML. :)

    32. the == 'true' should be == true, but you don't even need that part anyway.

    34. map() would be a bit smarter.. $("input[name='table\[\]']").map(function(){ return $(this).val(); }).get()

    37. if (window.console) will avoid some nasty errors.

    Overall pretty solid but there are some good recommendations to tighten this code up. :)
    Cheers

  5. 3. You use has() for looking inside that given element, instead of checking its own properties. hasClass() would be the right method for your example.

    9. $(elem).children().length or $(elem).is(':empty') are favored.

    10. You can just do .index() now in 1.4 for the same effect.

    19. That autoscroll plugin is fantastic. :) Gotta love it.

    20. I think you want to change the first > to >=

    28. I think wordpress mighta eaten your HTML. :)

    32. the == 'true' should be == true, but you don't even need that part anyway.

    34. map() would be a bit smarter.. $("input[name='table\[\]']").map(function(){ return $(this).val(); }).get()

    37. if (window.console) will avoid some nasty errors.

    Overall pretty solid but there are some good recommendations to tighten this code up. :)
    Cheers

    • Wow. First off, it's an honour for me to have THE Paul Irish even reading my blog ;)

      Thanks a lot for your recommendations, Paul. I think that they might really help to optimize the snippets and I look forward to including them in a future updated version of this list.

      Cheers

    • Why $(elem).children().length and not just $(elem).length?

      The above is the only one I can get to work in situations like:

      $( elem1 ).load( '/path/to/file.html', function(){

      console.log( $( elemInLoadedFile ).is( ':empty') ); /undefined
      console.log( $( elemInLoadedFile ).children().length ); /undefined
      console.log( $( elemInLoadedFile ).length ); //works
      })

  6. Hi!
    First off, quite a nice collection! :)

    I would however like to make a comment about the description next to the 5th snippet:
    "Also remember that anything you can do to be more specific about where the element is on your page will cut down on execution/search times".

    jQuery is using the Sizzle selector engine which uses a right to left model. This means selectors on the right (the end) should be specific and more broad on the left.

    For more info check out Paul Irish's presentation on selector optimization: http://paulirish.com/2009/perf/ Related slides from 29/61

    According to that .data td.cell
    is better than .data table.x tr.y td.cell

  7. Pingback: links for 2010-03-11 | Widmann Martin Blog

  8. Pingback: links for 2010-03-11 · blog.derrenwilson.net

  9. Pingback: delicious Links: 12. March 2010

  10. Pingback: 50のjQueryコードスニペット | Kechol

  11. Pingback: Notable Tech Posts – 2010.03.14 | The Life of Lew Ayotte

  12. Pingback: 50 nützliche Code-Schnippsel für jQuery | tagdocs.de

  13. Pingback: More Than Scratch The Surface » Blog Archive » Daily Digest for March 20th

  14. Pingback: Quoting Anything » Blog Archive » 50 jQuery Snippets That Will Help You Become A Better JavaScript Developer

  15. Pingback: 31 jQuery Snippets That Will Help Make You A JavaScript Pro | AddyOsmani.com | Where Web Businesses Grow

  16. Pingback: Manipulating the DOM with jQuery: 10+ useful code snippets « wp css et cie

  17. Pingback: +5 Snippets jQuery para manipular tu sitio web | Blog and Web

  18. Pingback: Manipulating the DOM with jQuery: 10+ useful code snippets « Upmedia Blog

  19. Pingback: Manipulating the DOM with jQuery: 10+ useful code snippets « PsTrick

  20. Some remarks on snippet #2: I wonder why storing jQuery element arrays in objects is such a miracle! This is one of the most common things I do with JQuery. I always prefix this variables with a $, like so:

    var $allItems = $("div.item");

    this helps me to tell them apart from "native" Javascript DOM Objects or other data types

  21. #38 and #39 could use something like this:
    $("a[href^='http']").attr('target','_blank');

    That way you don't HAVE to specify the .popup class. Looking for links that start with "http" is a pretty simple way to do it.

  22. Pingback: 使用 jQuery 操作 DOM:10+ 有用的代码片段 | 芒果

  23. Further to #26, why haven't you used .data() to store the default values for the inputs. That way, you don't need an annoying global var, and the default value is directly associated with the input. Like this:

    $(".swap").each(function(i){
    $(this).data('default_val', $(this).val());
    $(this).focusin(function(){
    if ($(this).val() == $(this).data('default_val')) {
    $(this).val("");
    }
    }).focusout(function(){
    if ($.trim($(this).val()) == "") {
    $(this).val($(this).data('default_val'));
    }
    });
    });

    By using the .data() function, you don't ever have to worry about some other programmer accidentally messing up your code by messing with your global variable. And the association between the default data and the input is much stronger, due to its implicit nature.

    Earl

Leave a Reply

Required fields are marked *.

*