Learning jQuery in 30 minutes

31
Learning jQuery in 30 minutes Simon Willison http://simonwillison.net / BarCamp London 3 24th November 2007

description

Slides from a half hour jQuery tutorial at BarCamp London 3.

Transcript of Learning jQuery in 30 minutes

Page 1: Learning jQuery in 30 minutes

Learning

jQueryin 30 minutes

Simon Willison http://simonwillison.net/BarCamp London 3 24th November 2007

Page 2: Learning jQuery in 30 minutes

What is it?

• A JavaScript library, just like...

• Prototype

• YUI

• Dojo

• mooTools

Page 3: Learning jQuery in 30 minutes

Why jQuery instead of...?

• Unlike Prototype and mooTools...

• ... it doesn’t interfere with your global namespace

• Unlike YUI...

• ... it’s extremely succinct

• Unlike Dojo...

• ... you can learn it in half an hour!

Page 4: Learning jQuery in 30 minutes

jQuery philosophy

• Focus on the interaction between JavaScript and HTML

• (Almost) every operation boils down to:

• Find some stuff

• Do something to it

Page 5: Learning jQuery in 30 minutes

Only one function!

• Absolutely everything* starts with a call to the jQuery() function

• Since it’s called so often, the $ variable is set up as an alias to jQuery

• If you’re also using another library you can revert to the previous $ function with jQuery.noConflict();

* not entirely true

Page 6: Learning jQuery in 30 minutes

jQuery('#nav')

jQuery('div#intro h2')

jQuery('#nav li.current a')

Page 7: Learning jQuery in 30 minutes

$('#nav')

$('div#intro h2')

$('#nav li.current a')

Page 8: Learning jQuery in 30 minutes

CSS 2 and 3 selectors

a[rel]

a[rel="friend"]

a[href^="http://"]

ul#nav > li

li#current ~ li (li siblings that follow #current)

li:first-child, li:last-child, li:nth-child(3)

Page 9: Learning jQuery in 30 minutes

Magic selectors

div:first, h3:last

:header

:hidden, :visible

:animated

:input, :text, :password, :radio, :submit...

div:contains(Hello)

Page 10: Learning jQuery in 30 minutes

jQuery collections

• $('div.section') returns a jQuery collection

• You can call treat it like an array

$('div.section').length = no. of matched elements

$('div.section')[0] - the first div DOM element

$('div.section')[1]

$('div.section')[2]

Page 11: Learning jQuery in 30 minutes

jQuery collections

• $('div.section') returns a jQuery collection

• You can call methods on it:

$('div.section').size() = no. of matched elements

$('div.section').each(function() {

console.log(this);

});

Page 12: Learning jQuery in 30 minutes

jQuery collections

• $('div.section') returns a jQuery collection

• You can call methods on it:

$('div.section').size() = no. of matched elements

$('div.section').each(function(i) {

console.log("Item " + i + " is ", this);

});

Page 13: Learning jQuery in 30 minutes

HTML futzing

$('span#msg').text('The thing was updated!');

$('div#intro').html('<em>Look, HTML</em>');

Page 14: Learning jQuery in 30 minutes

Attribute futzing

$('a.nav').attr('href', 'http://flickr.com/');

$('a.nav').attr({

'href': 'http://flickr.com/',

'id': 'flickr'

});

$('#intro').removeAttr('id');

Page 15: Learning jQuery in 30 minutes

CSS futzing

$('#intro').addClass('highlighted');

$('#intro').removeClass('highlighted');

$('#intro').toggleClass('highlighted');

$('p').css('font-size', '20px');

$('p').css({'font-size': '20px', color: 'red'});

Page 16: Learning jQuery in 30 minutes

Grabbing values

• Some methods return results from the first matched element

var height = $('div#intro').height();

var src = $('img.photo').attr('src');

var lastP = $('p:last').html()

var hasFoo = $('p').hasClass('foo');

var email = $('input#email').val();

Page 17: Learning jQuery in 30 minutes

Traversing the DOM

• jQuery provides enhanced methods for traversing the DOM

$('div.section').parent()

$('div.section').next()

$('div.section').prev()

$('div.section').nextAll('div')

$('h1:first').parents()

Page 18: Learning jQuery in 30 minutes

Handling events

$('a:first').click(function(ev) {

$(this).css({backgroundColor: 'orange'});

return false; // Or ev.preventDefault();

});

Page 19: Learning jQuery in 30 minutes

Handling events

$('a:first').click(function(ev) {

$(this).css({backgroundColor: 'orange'});

return false; // Or ev.preventDefault();

});

$('a:first').click();

Page 20: Learning jQuery in 30 minutes

Going unobtrusive

$(document).ready(function() {

alert('The DOM is ready!');

});

Page 21: Learning jQuery in 30 minutes

Going unobtrusive

$(function() {

alert('The DOM is ready!');

});

Page 22: Learning jQuery in 30 minutes

Chaining

• Most jQuery methods return another jQuery object - usually one representing the same collection. This means you can chain methods together:

$('div.section').hide().addClass('gone');

Page 23: Learning jQuery in 30 minutes

Advanced chaining

• Some methods return a different collection

• You can call .end() to revert to the previous collection

Page 24: Learning jQuery in 30 minutes

Advanced chaining

• Some methods return a different collection

• You can call .end() to revert to the previous collection

$('#intro').css('color', '#cccccc').

find('a').addClass('highlighted').end().

find('em').css('color', 'red').end()

Page 25: Learning jQuery in 30 minutes

Ajax

• jQuery has excellent support for Ajax

$('div#intro').load('/some/file.html');

• More advanced methods include:

$.get(url, params, callback)

$.post(url, params, callback)

$.getJSON(url, params, callback)

$.getScript(url, callback)

Page 26: Learning jQuery in 30 minutes

Animation

• jQuery has built in effects:

$('h1').hide('slow');

$('h1').slideDown('fast');

$('h1').fadeOut(2000);

• You can chain them:

$('h1').fadeOut(1000).slideDown()

Page 27: Learning jQuery in 30 minutes

$("#block").animate({

width: "+=60px",

opacity: 0.4,

fontSize: "3em",

borderWidth: "10px"

}, 1500);

Or roll your own...

Page 28: Learning jQuery in 30 minutes

Plugins

• jQuery is extensible through plugins, which can add new methods to the jQuery object

• Form: better form manipulation

• UI: drag and drop and widgets

• $('img[@src$=.png]').ifixpng()

• ... dozens more

Page 29: Learning jQuery in 30 minutes

jQuery.fn.hideLinks = function() {

this.find('a[href]').hide();

return this;

}

$('p').hideLinks();

Page 30: Learning jQuery in 30 minutes

jQuery.fn.hideLinks = function() {

return this.find('a[href]').hide().end();

}

$('p').hideLinks();

Page 31: Learning jQuery in 30 minutes

Further reading

• http://jquery.com/

• http://docs.jquery.com/

• http://visualjquery.com/ - API reference

• http://simonwillison.net/tags/jquery/