jquery - e-book · pdf file3/23/2007 · • navigate or query the document tree:...

134
jQuery Steven Wittens Making JavaScript fun again

Upload: doxuyen

Post on 23-Feb-2018

227 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: jQuery - e-book · PDF file3/23/2007 · • Navigate or query the document tree: ... • Drupal core JS rewritten to use jQuery: Less code! Attractive Platform. Attractive Platform

jQuery

Steven Wittens

Making JavaScript fun again

Page 2: jQuery - e-book · PDF file3/23/2007 · • Navigate or query the document tree: ... • Drupal core JS rewritten to use jQuery: Less code! Attractive Platform. Attractive Platform

DrupalCon / BarCamp Brussels 2006

Pretty much the same talk.

Page 3: jQuery - e-book · PDF file3/23/2007 · • Navigate or query the document tree: ... • Drupal core JS rewritten to use jQuery: Less code! Attractive Platform. Attractive Platform

JavaScriptYou probably hate it.

Page 4: jQuery - e-book · PDF file3/23/2007 · • Navigate or query the document tree: ... • Drupal core JS rewritten to use jQuery: Less code! Attractive Platform. Attractive Platform

It has nothing to do with Java.

Page 5: jQuery - e-book · PDF file3/23/2007 · • Navigate or query the document tree: ... • Drupal core JS rewritten to use jQuery: Less code! Attractive Platform. Attractive Platform

“It’s buggy and broken”

Page 6: jQuery - e-book · PDF file3/23/2007 · • Navigate or query the document tree: ... • Drupal core JS rewritten to use jQuery: Less code! Attractive Platform. Attractive Platform

“It’s buggy and broken”

• Browsers do suck

Page 7: jQuery - e-book · PDF file3/23/2007 · • Navigate or query the document tree: ... • Drupal core JS rewritten to use jQuery: Less code! Attractive Platform. Attractive Platform

“It’s buggy and broken”

• Browsers do suck

• Implementations of CSS, events, ... brokenLanguage itself is pretty reliable

Page 8: jQuery - e-book · PDF file3/23/2007 · • Navigate or query the document tree: ... • Drupal core JS rewritten to use jQuery: Less code! Attractive Platform. Attractive Platform

“It’s buggy and broken”

• Browsers do suck

• Implementations of CSS, events, ... brokenLanguage itself is pretty reliable

• Orders of magnitude better than in the 90’s

Page 9: jQuery - e-book · PDF file3/23/2007 · • Navigate or query the document tree: ... • Drupal core JS rewritten to use jQuery: Less code! Attractive Platform. Attractive Platform

“It’s buggy and broken”

• Browsers do suck

• Implementations of CSS, events, ... brokenLanguage itself is pretty reliable

• Orders of magnitude better than in the 90’s

• Blame IE6

Page 10: jQuery - e-book · PDF file3/23/2007 · • Navigate or query the document tree: ... • Drupal core JS rewritten to use jQuery: Less code! Attractive Platform. Attractive Platform

“Used only forannoying people”

Page 11: jQuery - e-book · PDF file3/23/2007 · • Navigate or query the document tree: ... • Drupal core JS rewritten to use jQuery: Less code! Attractive Platform. Attractive Platform

“Used only forannoying people”

• Usability is a problem with or without JS

Page 12: jQuery - e-book · PDF file3/23/2007 · • Navigate or query the document tree: ... • Drupal core JS rewritten to use jQuery: Less code! Attractive Platform. Attractive Platform

“Used only forannoying people”

• Usability is a problem with or without JS

• Browsers prevent worst offenses

Page 13: jQuery - e-book · PDF file3/23/2007 · • Navigate or query the document tree: ... • Drupal core JS rewritten to use jQuery: Less code! Attractive Platform. Attractive Platform

“Used only forannoying people”

• Usability is a problem with or without JS

• Browsers prevent worst offenses

• Use for good, not for evil

Page 14: jQuery - e-book · PDF file3/23/2007 · • Navigate or query the document tree: ... • Drupal core JS rewritten to use jQuery: Less code! Attractive Platform. Attractive Platform

“Only use it because you have to”

Page 15: jQuery - e-book · PDF file3/23/2007 · • Navigate or query the document tree: ... • Drupal core JS rewritten to use jQuery: Less code! Attractive Platform. Attractive Platform

“Only use it because you have to”

• The most successful scripting environment?

Page 16: jQuery - e-book · PDF file3/23/2007 · • Navigate or query the document tree: ... • Drupal core JS rewritten to use jQuery: Less code! Attractive Platform. Attractive Platform

“Only use it because you have to”

• The most successful scripting environment?

Every browser, many OSes (Windows, Dashboard), XUL (Mozilla), Flash (ActionScript), server-side (ASP, Rhino), ...

Page 17: jQuery - e-book · PDF file3/23/2007 · • Navigate or query the document tree: ... • Drupal core JS rewritten to use jQuery: Less code! Attractive Platform. Attractive Platform

“Only use it because you have to”

• The most successful scripting environment?

Every browser, many OSes (Windows, Dashboard), XUL (Mozilla), Flash (ActionScript), server-side (ASP, Rhino), ...

• Great for UI-coding

Page 18: jQuery - e-book · PDF file3/23/2007 · • Navigate or query the document tree: ... • Drupal core JS rewritten to use jQuery: Less code! Attractive Platform. Attractive Platform

Flexible & Powerful

Page 19: jQuery - e-book · PDF file3/23/2007 · • Navigate or query the document tree: ... • Drupal core JS rewritten to use jQuery: Less code! Attractive Platform. Attractive Platform

Flexible & Powerful

• Imperative, functional and OO

Page 20: jQuery - e-book · PDF file3/23/2007 · • Navigate or query the document tree: ... • Drupal core JS rewritten to use jQuery: Less code! Attractive Platform. Attractive Platform

Flexible & Powerful

• Imperative, functional and OO

• Lexical scope and closures+ Anonymous functions

Page 21: jQuery - e-book · PDF file3/23/2007 · • Navigate or query the document tree: ... • Drupal core JS rewritten to use jQuery: Less code! Attractive Platform. Attractive Platform

Flexible & Powerful

• Imperative, functional and OO

• Lexical scope and closures+ Anonymous functions

• Everything is an object (including functions)

Page 22: jQuery - e-book · PDF file3/23/2007 · • Navigate or query the document tree: ... • Drupal core JS rewritten to use jQuery: Less code! Attractive Platform. Attractive Platform

Flexible & Powerful

• Imperative, functional and OO

• Lexical scope and closures+ Anonymous functions

• Everything is an object (including functions)

• Prototype-based inheritance

Page 23: jQuery - e-book · PDF file3/23/2007 · • Navigate or query the document tree: ... • Drupal core JS rewritten to use jQuery: Less code! Attractive Platform. Attractive Platform

Learn JavaScriptYou know you want to.

Page 24: jQuery - e-book · PDF file3/23/2007 · • Navigate or query the document tree: ... • Drupal core JS rewritten to use jQuery: Less code! Attractive Platform. Attractive Platform

Essentials

Page 25: jQuery - e-book · PDF file3/23/2007 · • Navigate or query the document tree: ... • Drupal core JS rewritten to use jQuery: Less code! Attractive Platform. Attractive Platform

Essentialsvar myInt = 1;

Page 26: jQuery - e-book · PDF file3/23/2007 · • Navigate or query the document tree: ... • Drupal core JS rewritten to use jQuery: Less code! Attractive Platform. Attractive Platform

Essentialsvar myInt = 1;

var myString = “foobar”;

Page 27: jQuery - e-book · PDF file3/23/2007 · • Navigate or query the document tree: ... • Drupal core JS rewritten to use jQuery: Less code! Attractive Platform. Attractive Platform

Essentialsvar myInt = 1;

var myString = “foobar”;

var myArray = [ 1, ‘two’, “three” ];// myArray[0] == 1

Page 28: jQuery - e-book · PDF file3/23/2007 · • Navigate or query the document tree: ... • Drupal core JS rewritten to use jQuery: Less code! Attractive Platform. Attractive Platform

Essentialsvar myInt = 1;

var myString = “foobar”;

var myArray = [ 1, ‘two’, “three” ];// myArray[0] == 1

var myHash = { foo: 1, ‘bar’: ‘two’ };// myHash.foo == 1// myHash[‘foo’] == 1

Page 29: jQuery - e-book · PDF file3/23/2007 · • Navigate or query the document tree: ... • Drupal core JS rewritten to use jQuery: Less code! Attractive Platform. Attractive Platform

Essentialsvar myInt = 1;

var myString = “foobar”;

var myArray = [ 1, ‘two’, “three” ];// myArray[0] == 1

var myHash = { foo: 1, ‘bar’: ‘two’ };// myHash.foo == 1// myHash[‘foo’] == 1

if(), switch(), for(), ... work like you expect them to.

Page 30: jQuery - e-book · PDF file3/23/2007 · • Navigate or query the document tree: ... • Drupal core JS rewritten to use jQuery: Less code! Attractive Platform. Attractive Platform

Function = Primitive type

Page 31: jQuery - e-book · PDF file3/23/2007 · • Navigate or query the document tree: ... • Drupal core JS rewritten to use jQuery: Less code! Attractive Platform. Attractive Platform

Function = Primitive typefunction myFunction() { ...};

Page 32: jQuery - e-book · PDF file3/23/2007 · • Navigate or query the document tree: ... • Drupal core JS rewritten to use jQuery: Less code! Attractive Platform. Attractive Platform

Function = Primitive typefunction myFunction() { ...};

var myFunction = function () { ...};

Page 33: jQuery - e-book · PDF file3/23/2007 · • Navigate or query the document tree: ... • Drupal core JS rewritten to use jQuery: Less code! Attractive Platform. Attractive Platform

Function = Primitive typefunction myFunction() { ...};

var myFunction = function () { ...};

var sameFunction = myFunction;sameFunction();

Page 34: jQuery - e-book · PDF file3/23/2007 · • Navigate or query the document tree: ... • Drupal core JS rewritten to use jQuery: Less code! Attractive Platform. Attractive Platform

Function = Primitive typefunction myFunction() { ...};

var myFunction = function () { ...};

var sameFunction = myFunction;sameFunction();

(function () { ... })();

Page 35: jQuery - e-book · PDF file3/23/2007 · • Navigate or query the document tree: ... • Drupal core JS rewritten to use jQuery: Less code! Attractive Platform. Attractive Platform

Hash = Object

Page 36: jQuery - e-book · PDF file3/23/2007 · • Navigate or query the document tree: ... • Drupal core JS rewritten to use jQuery: Less code! Attractive Platform. Attractive Platform

Hash = Objectvar myObject = { foo: 1, bar: ‘two’, spam: function () { this.foo++; }};

Page 37: jQuery - e-book · PDF file3/23/2007 · • Navigate or query the document tree: ... • Drupal core JS rewritten to use jQuery: Less code! Attractive Platform. Attractive Platform

Hash = Objectvar myObject = { foo: 1, bar: ‘two’, spam: function () { this.foo++; }};

myObject.spam = function () { this.foo += 2;};

Page 38: jQuery - e-book · PDF file3/23/2007 · • Navigate or query the document tree: ... • Drupal core JS rewritten to use jQuery: Less code! Attractive Platform. Attractive Platform

Hash = Objectvar myObject = { foo: 1, bar: ‘two’, spam: function () { this.foo++; }};

myObject.spam = function () { this.foo += 2;};

myObject.spam();

Page 39: jQuery - e-book · PDF file3/23/2007 · • Navigate or query the document tree: ... • Drupal core JS rewritten to use jQuery: Less code! Attractive Platform. Attractive Platform

Function =Object Constructor

var myClass = function (doodad) { this.doodad = doodad; this.spam = function () { ... }; return this;};

var myObject = new myClass(“boing”);myObject.spam();

Page 40: jQuery - e-book · PDF file3/23/2007 · • Navigate or query the document tree: ... • Drupal core JS rewritten to use jQuery: Less code! Attractive Platform. Attractive Platform

Function =Object Constructor

var myClass = function (doodad) { this.doodad = doodad;

return this;};

myClass.prototype.spam = function () {...};

var myObject = new myClass(“boing”);myObject.spam();

Page 41: jQuery - e-book · PDF file3/23/2007 · • Navigate or query the document tree: ... • Drupal core JS rewritten to use jQuery: Less code! Attractive Platform. Attractive Platform

Function = Closurefunction myFunction() {

var counter = 0;

function closureFunction() {counter++;alert(counter);

};

closureFunction(); // shows ‘1’closureFunction(); // shows ‘2’

};

Page 42: jQuery - e-book · PDF file3/23/2007 · • Navigate or query the document tree: ... • Drupal core JS rewritten to use jQuery: Less code! Attractive Platform. Attractive Platform

Function = Closurefunction myFunction() {

var counter = 0;

function closureFunction() {counter++;alert(counter);

};

return closureFunction;};

var closure = myFunction();closure(); // shows ‘1’closure(); // shows ‘2’

Page 43: jQuery - e-book · PDF file3/23/2007 · • Navigate or query the document tree: ... • Drupal core JS rewritten to use jQuery: Less code! Attractive Platform. Attractive Platform

Function = Closurefunction myFunction() {

var counter = 0;

function closureFunction() {counter++;alert(counter);

};

return closureFunction;};

var closure = myFunction();closure(); // shows ‘1’closure(); // shows ‘2’

Page 44: jQuery - e-book · PDF file3/23/2007 · • Navigate or query the document tree: ... • Drupal core JS rewritten to use jQuery: Less code! Attractive Platform. Attractive Platform

Function = Closurefunction myFunction() {

var counter = 0;

function closureFunction() {counter++;alert(counter);

};

return closureFunction;};

var closure = myFunction();closure(); // shows ‘1’closure(); // shows ‘2’

Page 45: jQuery - e-book · PDF file3/23/2007 · • Navigate or query the document tree: ... • Drupal core JS rewritten to use jQuery: Less code! Attractive Platform. Attractive Platform

See the light

Page 46: jQuery - e-book · PDF file3/23/2007 · • Navigate or query the document tree: ... • Drupal core JS rewritten to use jQuery: Less code! Attractive Platform. Attractive Platform
Page 47: jQuery - e-book · PDF file3/23/2007 · • Navigate or query the document tree: ... • Drupal core JS rewritten to use jQuery: Less code! Attractive Platform. Attractive Platform

JavaScript is Cool.JavaScript is Cool.JavaScript is Cool.

Page 48: jQuery - e-book · PDF file3/23/2007 · • Navigate or query the document tree: ... • Drupal core JS rewritten to use jQuery: Less code! Attractive Platform. Attractive Platform

Browser ScriptingMake IE your bitch.

Page 49: jQuery - e-book · PDF file3/23/2007 · • Navigate or query the document tree: ... • Drupal core JS rewritten to use jQuery: Less code! Attractive Platform. Attractive Platform

Document Object Model (DOM)

Page 50: jQuery - e-book · PDF file3/23/2007 · • Navigate or query the document tree: ... • Drupal core JS rewritten to use jQuery: Less code! Attractive Platform. Attractive Platform

Document Object Model (DOM)

• Representation of the HTML document

Page 51: jQuery - e-book · PDF file3/23/2007 · • Navigate or query the document tree: ... • Drupal core JS rewritten to use jQuery: Less code! Attractive Platform. Attractive Platform

Document Object Model (DOM)

• Representation of the HTML document

• DOM Node = Element or <Tag></Tag>

Page 52: jQuery - e-book · PDF file3/23/2007 · • Navigate or query the document tree: ... • Drupal core JS rewritten to use jQuery: Less code! Attractive Platform. Attractive Platform

Document Object Model (DOM)

• Representation of the HTML document

• DOM Node = Element or <Tag></Tag>

• Root ‘document’ object

Page 53: jQuery - e-book · PDF file3/23/2007 · • Navigate or query the document tree: ... • Drupal core JS rewritten to use jQuery: Less code! Attractive Platform. Attractive Platform

Document Object Model (DOM)

Page 54: jQuery - e-book · PDF file3/23/2007 · • Navigate or query the document tree: ... • Drupal core JS rewritten to use jQuery: Less code! Attractive Platform. Attractive Platform

Document Object Model (DOM)

• Navigate or query the document tree:var node = document.getElementById(‘my-element’);var child = node.nextSibling.firstChild;

Page 55: jQuery - e-book · PDF file3/23/2007 · • Navigate or query the document tree: ... • Drupal core JS rewritten to use jQuery: Less code! Attractive Platform. Attractive Platform

Document Object Model (DOM)

• Navigate or query the document tree:

• Alter element properties and styles:

var node = document.getElementById(‘my-element’);var child = node.nextSibling.firstChild;

node.setAttribute(‘href’) = ‘http://drupal.org/’;node.style.backgroundColor = ‘red’;alert(node.getAttribute(‘title’));

Page 56: jQuery - e-book · PDF file3/23/2007 · • Navigate or query the document tree: ... • Drupal core JS rewritten to use jQuery: Less code! Attractive Platform. Attractive Platform

DOM Events

Page 57: jQuery - e-book · PDF file3/23/2007 · • Navigate or query the document tree: ... • Drupal core JS rewritten to use jQuery: Less code! Attractive Platform. Attractive Platform

DOM Events

• Respond to user interaction: change, click, keydown, mousemove, ...

Page 58: jQuery - e-book · PDF file3/23/2007 · • Navigate or query the document tree: ... • Drupal core JS rewritten to use jQuery: Less code! Attractive Platform. Attractive Platform

DOM Events

• Respond to user interaction: change, click, keydown, mousemove, ...

• Assign an event handler for a particularDOM Node:

node.onclick = function () { this.style.color = ‘green’;}

Page 59: jQuery - e-book · PDF file3/23/2007 · • Navigate or query the document tree: ... • Drupal core JS rewritten to use jQuery: Less code! Attractive Platform. Attractive Platform

‘AJAX’

Page 60: jQuery - e-book · PDF file3/23/2007 · • Navigate or query the document tree: ... • Drupal core JS rewritten to use jQuery: Less code! Attractive Platform. Attractive Platform

‘AJAX’

• Make HTTP GET and POST requests from within JS

Page 61: jQuery - e-book · PDF file3/23/2007 · • Navigate or query the document tree: ... • Drupal core JS rewritten to use jQuery: Less code! Attractive Platform. Attractive Platform

‘AJAX’

• Make HTTP GET and POST requests from within JS

• XML

Page 62: jQuery - e-book · PDF file3/23/2007 · • Navigate or query the document tree: ... • Drupal core JS rewritten to use jQuery: Less code! Attractive Platform. Attractive Platform

‘AJAX’

• Make HTTP GET and POST requests from within JS

• XML

• HTML (‘AHAH’)

Page 63: jQuery - e-book · PDF file3/23/2007 · • Navigate or query the document tree: ... • Drupal core JS rewritten to use jQuery: Less code! Attractive Platform. Attractive Platform

‘AJAX’

• Make HTTP GET and POST requests from within JS

• XML

• HTML (‘AHAH’)

• JSON

Page 64: jQuery - e-book · PDF file3/23/2007 · • Navigate or query the document tree: ... • Drupal core JS rewritten to use jQuery: Less code! Attractive Platform. Attractive Platform

‘AJAX’

• Make HTTP GET and POST requests from within JS

• XML

• HTML (‘AHAH’)

• JSON

• JavaScript

Page 65: jQuery - e-book · PDF file3/23/2007 · • Navigate or query the document tree: ... • Drupal core JS rewritten to use jQuery: Less code! Attractive Platform. Attractive Platform

‘AJAX’

• Make HTTP GET and POST requests from within JS

• XML

• HTML (‘AHAH’)

• JSON

• JavaScript

• Normal POST data

Page 66: jQuery - e-book · PDF file3/23/2007 · • Navigate or query the document tree: ... • Drupal core JS rewritten to use jQuery: Less code! Attractive Platform. Attractive Platform

Things fly aroundon the page

=AJAX?

Page 67: jQuery - e-book · PDF file3/23/2007 · • Navigate or query the document tree: ... • Drupal core JS rewritten to use jQuery: Less code! Attractive Platform. Attractive Platform

Things fly aroundon the page

=AJAX?

Page 68: jQuery - e-book · PDF file3/23/2007 · • Navigate or query the document tree: ... • Drupal core JS rewritten to use jQuery: Less code! Attractive Platform. Attractive Platform

Wait, wasn’t this talk about jQuery?

Page 69: jQuery - e-book · PDF file3/23/2007 · • Navigate or query the document tree: ... • Drupal core JS rewritten to use jQuery: Less code! Attractive Platform. Attractive Platform

Problems?

Page 70: jQuery - e-book · PDF file3/23/2007 · • Navigate or query the document tree: ... • Drupal core JS rewritten to use jQuery: Less code! Attractive Platform. Attractive Platform

Problems?

• DOM tree is clunky to use

Page 71: jQuery - e-book · PDF file3/23/2007 · • Navigate or query the document tree: ... • Drupal core JS rewritten to use jQuery: Less code! Attractive Platform. Attractive Platform

Problems?

• DOM tree is clunky to use

• No multiple handlers per event

Page 72: jQuery - e-book · PDF file3/23/2007 · • Navigate or query the document tree: ... • Drupal core JS rewritten to use jQuery: Less code! Attractive Platform. Attractive Platform

Problems?

• DOM tree is clunky to use

• No multiple handlers per event

• Browser incompatibilities

Page 73: jQuery - e-book · PDF file3/23/2007 · • Navigate or query the document tree: ... • Drupal core JS rewritten to use jQuery: Less code! Attractive Platform. Attractive Platform

Problems?

• DOM tree is clunky to use

• No multiple handlers per event

• Browser incompatibilities

• No high-level functions

Page 74: jQuery - e-book · PDF file3/23/2007 · • Navigate or query the document tree: ... • Drupal core JS rewritten to use jQuery: Less code! Attractive Platform. Attractive Platform

Problems?

• DOM tree is clunky to use

• No multiple handlers per event

• Browser incompatibilities

• No high-level functions

= JavaScript libraries to fill the gap

Page 75: jQuery - e-book · PDF file3/23/2007 · • Navigate or query the document tree: ... • Drupal core JS rewritten to use jQuery: Less code! Attractive Platform. Attractive Platform

‘New Wave’ JavaScript

Page 76: jQuery - e-book · PDF file3/23/2007 · • Navigate or query the document tree: ... • Drupal core JS rewritten to use jQuery: Less code! Attractive Platform. Attractive Platform

‘New Wave’ JavaScript

• jQuery – John Resig

Page 77: jQuery - e-book · PDF file3/23/2007 · • Navigate or query the document tree: ... • Drupal core JS rewritten to use jQuery: Less code! Attractive Platform. Attractive Platform

‘New Wave’ JavaScript

• jQuery – John Resig

• Released at BarCamp NYC (Jan 2006).

Page 78: jQuery - e-book · PDF file3/23/2007 · • Navigate or query the document tree: ... • Drupal core JS rewritten to use jQuery: Less code! Attractive Platform. Attractive Platform

‘New Wave’ JavaScript

• jQuery – John Resig

• Released at BarCamp NYC (Jan 2006).

• jQuery 1.0 out (Aug 2006)

Page 79: jQuery - e-book · PDF file3/23/2007 · • Navigate or query the document tree: ... • Drupal core JS rewritten to use jQuery: Less code! Attractive Platform. Attractive Platform

‘New Wave’ JavaScript

• jQuery – John Resig

• Released at BarCamp NYC (Jan 2006).

• jQuery 1.0 out (Aug 2006)

• jQuery 1.1.2 latest

Page 80: jQuery - e-book · PDF file3/23/2007 · • Navigate or query the document tree: ... • Drupal core JS rewritten to use jQuery: Less code! Attractive Platform. Attractive Platform

jQuery

Page 81: jQuery - e-book · PDF file3/23/2007 · • Navigate or query the document tree: ... • Drupal core JS rewritten to use jQuery: Less code! Attractive Platform. Attractive Platform

jQuery

• Doesn’t mess with the language (Prototype)

Page 82: jQuery - e-book · PDF file3/23/2007 · • Navigate or query the document tree: ... • Drupal core JS rewritten to use jQuery: Less code! Attractive Platform. Attractive Platform

jQuery

• Doesn’t mess with the language (Prototype)

• Doesn’t try to be Python (Mochikit)

Page 83: jQuery - e-book · PDF file3/23/2007 · • Navigate or query the document tree: ... • Drupal core JS rewritten to use jQuery: Less code! Attractive Platform. Attractive Platform

jQuery

• Doesn’t mess with the language (Prototype)

• Doesn’t try to be Python (Mochikit)

• Only essentials: 15KB (Scriptaculous, Dojo)

Page 84: jQuery - e-book · PDF file3/23/2007 · • Navigate or query the document tree: ... • Drupal core JS rewritten to use jQuery: Less code! Attractive Platform. Attractive Platform

jQuery

• Doesn’t mess with the language (Prototype)

• Doesn’t try to be Python (Mochikit)

• Only essentials: 15KB (Scriptaculous, Dojo)

• More than cosmetic effects (Moo.fx)

Page 85: jQuery - e-book · PDF file3/23/2007 · • Navigate or query the document tree: ... • Drupal core JS rewritten to use jQuery: Less code! Attractive Platform. Attractive Platform

jQuery

• Doesn’t mess with the language (Prototype)

• Doesn’t try to be Python (Mochikit)

• Only essentials: 15KB (Scriptaculous, Dojo)

• More than cosmetic effects (Moo.fx)

• Makes common tasks easy

Page 86: jQuery - e-book · PDF file3/23/2007 · • Navigate or query the document tree: ... • Drupal core JS rewritten to use jQuery: Less code! Attractive Platform. Attractive Platform

Before – Plain DOM var fieldsets = document.getElementsByTagName('fieldset'); var legend, fieldset; for (var i = 0; fieldset = fieldsets[i]; i++) { if (!hasClass(fieldset, 'collapsible')) { continue; } legend = fieldset.getElementsByTagName('legend'); if (legend.length == 0) { continue; } legend = legend[0]; ... }

Page 87: jQuery - e-book · PDF file3/23/2007 · • Navigate or query the document tree: ... • Drupal core JS rewritten to use jQuery: Less code! Attractive Platform. Attractive Platform

After – With jQuery

$('fieldset.collapsible legend').each(function () {...});

Page 88: jQuery - e-book · PDF file3/23/2007 · • Navigate or query the document tree: ... • Drupal core JS rewritten to use jQuery: Less code! Attractive Platform. Attractive Platform

jQueries

Page 89: jQuery - e-book · PDF file3/23/2007 · • Navigate or query the document tree: ... • Drupal core JS rewritten to use jQuery: Less code! Attractive Platform. Attractive Platform

jQueries

• Use CSS3/XPath selectors to find elements

$(‘#my-element’)$(‘fieldset.collapsible > legend’)$(‘table.prices tr:last-of-type td’)

Page 90: jQuery - e-book · PDF file3/23/2007 · • Navigate or query the document tree: ... • Drupal core JS rewritten to use jQuery: Less code! Attractive Platform. Attractive Platform

jQueries

• Use CSS3/XPath selectors to find elements

• Apply operations to all selected elements

$(‘#my-element’)$(‘fieldset.collapsible > legend’)$(‘table.prices tr:last-of-type td’)

$(‘p:hidden’).addClass(‘emphasis’);$(‘p:hidden’).slideDown(‘fast’);

Page 91: jQuery - e-book · PDF file3/23/2007 · • Navigate or query the document tree: ... • Drupal core JS rewritten to use jQuery: Less code! Attractive Platform. Attractive Platform

It Gets Better

Page 92: jQuery - e-book · PDF file3/23/2007 · • Navigate or query the document tree: ... • Drupal core JS rewritten to use jQuery: Less code! Attractive Platform. Attractive Platform

It Gets Better

• jQuery Methods are chainable. Query object is stateful:

$(‘p’).addClass(‘big’).wrap(‘<span></span>’)

Page 93: jQuery - e-book · PDF file3/23/2007 · • Navigate or query the document tree: ... • Drupal core JS rewritten to use jQuery: Less code! Attractive Platform. Attractive Platform

It Gets Better

• jQuery Methods are chainable. Query object is stateful:

$(‘p’).addClass(‘big’).wrap(‘<span></span>’).filter(‘.tagged’).css(‘background’, ‘red’).end()

Page 94: jQuery - e-book · PDF file3/23/2007 · • Navigate or query the document tree: ... • Drupal core JS rewritten to use jQuery: Less code! Attractive Platform. Attractive Platform

It Gets Better

• jQuery Methods are chainable. Query object is stateful:

$(‘p’).addClass(‘big’).wrap(‘<span></span>’).filter(‘.tagged’).css(‘background’, ‘red’).end().filter(‘:hidden’).slideDown(‘fast’).end();

Page 95: jQuery - e-book · PDF file3/23/2007 · • Navigate or query the document tree: ... • Drupal core JS rewritten to use jQuery: Less code! Attractive Platform. Attractive Platform

It Gets Better

• jQuery Methods are chainable. Query object is stateful:

• Sensible event handling

$(‘p’).addClass(‘big’).wrap(‘<span></span>’).filter(‘.tagged’).css(‘background’, ‘red’).end().filter(‘:hidden’).slideDown(‘fast’).end();

$(‘span.info’) .mouseover(function () { ... }) .mouseout(function () { ... });

Page 96: jQuery - e-book · PDF file3/23/2007 · • Navigate or query the document tree: ... • Drupal core JS rewritten to use jQuery: Less code! Attractive Platform. Attractive Platform

“Do What I Mean”

Page 97: jQuery - e-book · PDF file3/23/2007 · • Navigate or query the document tree: ... • Drupal core JS rewritten to use jQuery: Less code! Attractive Platform. Attractive Platform

“Do What I Mean”

$('<div id="throbber"><img src="indicator.gif" alt=""></div>')

Page 98: jQuery - e-book · PDF file3/23/2007 · • Navigate or query the document tree: ... • Drupal core JS rewritten to use jQuery: Less code! Attractive Platform. Attractive Platform

“Do What I Mean”

$('<div id="throbber"><img src="indicator.gif" alt=""></div>') .hide()

Page 99: jQuery - e-book · PDF file3/23/2007 · • Navigate or query the document tree: ... • Drupal core JS rewritten to use jQuery: Less code! Attractive Platform. Attractive Platform

“Do What I Mean”

$('<div id="throbber"><img src="indicator.gif" alt=""></div>') .hide() .ajaxStart(function(){ $(this).show(); })

Page 100: jQuery - e-book · PDF file3/23/2007 · • Navigate or query the document tree: ... • Drupal core JS rewritten to use jQuery: Less code! Attractive Platform. Attractive Platform

“Do What I Mean”

$('<div id="throbber"><img src="indicator.gif" alt=""></div>') .hide() .ajaxStart(function(){ $(this).show(); }) .ajaxStop(function(){ $(this).hide(); })

Page 101: jQuery - e-book · PDF file3/23/2007 · • Navigate or query the document tree: ... • Drupal core JS rewritten to use jQuery: Less code! Attractive Platform. Attractive Platform

“Do What I Mean”

$('<div id="throbber"><img src="indicator.gif" alt=""></div>') .hide() .ajaxStart(function(){ $(this).show(); }) .ajaxStop(function(){ $(this).hide(); }) .appendTo("#someContainer");

Page 102: jQuery - e-book · PDF file3/23/2007 · • Navigate or query the document tree: ... • Drupal core JS rewritten to use jQuery: Less code! Attractive Platform. Attractive Platform

Plug-ins

Page 103: jQuery - e-book · PDF file3/23/2007 · • Navigate or query the document tree: ... • Drupal core JS rewritten to use jQuery: Less code! Attractive Platform. Attractive Platform

Plug-ins

• Already more than 160

Page 104: jQuery - e-book · PDF file3/23/2007 · • Navigate or query the document tree: ... • Drupal core JS rewritten to use jQuery: Less code! Attractive Platform. Attractive Platform

Plug-ins

• Already more than 160

• New (chainable) methods

Page 105: jQuery - e-book · PDF file3/23/2007 · • Navigate or query the document tree: ... • Drupal core JS rewritten to use jQuery: Less code! Attractive Platform. Attractive Platform

Plug-ins

• Already more than 160

• New (chainable) methods

• Additional Effects (Pause, Ease)

Page 106: jQuery - e-book · PDF file3/23/2007 · • Navigate or query the document tree: ... • Drupal core JS rewritten to use jQuery: Less code! Attractive Platform. Attractive Platform

Plug-ins

• Already more than 160

• New (chainable) methods

• Additional Effects (Pause, Ease)

• New Abilities (Interface, Caching, Forms)

Page 107: jQuery - e-book · PDF file3/23/2007 · • Navigate or query the document tree: ... • Drupal core JS rewritten to use jQuery: Less code! Attractive Platform. Attractive Platform

Plug-ins

• Already more than 160

• New (chainable) methods

• Additional Effects (Pause, Ease)

• New Abilities (Interface, Caching, Forms)

• Widgets (Thickbox, Farbtastic, ImagePan)

Page 108: jQuery - e-book · PDF file3/23/2007 · • Navigate or query the document tree: ... • Drupal core JS rewritten to use jQuery: Less code! Attractive Platform. Attractive Platform

jQuery in your CMSAnd how we did it in Drupal

Page 109: jQuery - e-book · PDF file3/23/2007 · • Navigate or query the document tree: ... • Drupal core JS rewritten to use jQuery: Less code! Attractive Platform. Attractive Platform

JavaScript in a CMS

Page 110: jQuery - e-book · PDF file3/23/2007 · • Navigate or query the document tree: ... • Drupal core JS rewritten to use jQuery: Less code! Attractive Platform. Attractive Platform

JavaScript in a CMS

• Lots of server-side logicLocalization, Formatting, Theming, ...

Page 111: jQuery - e-book · PDF file3/23/2007 · • Navigate or query the document tree: ... • Drupal core JS rewritten to use jQuery: Less code! Attractive Platform. Attractive Platform

JavaScript in a CMS

• Lots of server-side logicLocalization, Formatting, Theming, ...

• Stick to small, self-contained JS features

Page 112: jQuery - e-book · PDF file3/23/2007 · • Navigate or query the document tree: ... • Drupal core JS rewritten to use jQuery: Less code! Attractive Platform. Attractive Platform

JavaScript in a CMS

• Lots of server-side logicLocalization, Formatting, Theming, ...

• Stick to small, self-contained JS features

• No complete client-side applications

Page 113: jQuery - e-book · PDF file3/23/2007 · • Navigate or query the document tree: ... • Drupal core JS rewritten to use jQuery: Less code! Attractive Platform. Attractive Platform

JavaScript in a CMS

• Lots of server-side logicLocalization, Formatting, Theming, ...

• Stick to small, self-contained JS features

• No complete client-side applications

Still: demand for good JS library

Page 114: jQuery - e-book · PDF file3/23/2007 · • Navigate or query the document tree: ... • Drupal core JS rewritten to use jQuery: Less code! Attractive Platform. Attractive Platform

Server-Side

Page 115: jQuery - e-book · PDF file3/23/2007 · • Navigate or query the document tree: ... • Drupal core JS rewritten to use jQuery: Less code! Attractive Platform. Attractive Platform

Server-Side

• Nothing really changes

Page 116: jQuery - e-book · PDF file3/23/2007 · • Navigate or query the document tree: ... • Drupal core JS rewritten to use jQuery: Less code! Attractive Platform. Attractive Platform

Server-Side

• Nothing really changes

• Callbacks to answer AJAX calls

Page 117: jQuery - e-book · PDF file3/23/2007 · • Navigate or query the document tree: ... • Drupal core JS rewritten to use jQuery: Less code! Attractive Platform. Attractive Platform

Server-Side

• Nothing really changes

• Callbacks to answer AJAX calls

• Just a .js file – unobtrusive JavaScript

Page 118: jQuery - e-book · PDF file3/23/2007 · • Navigate or query the document tree: ... • Drupal core JS rewritten to use jQuery: Less code! Attractive Platform. Attractive Platform

Server-Side

• Nothing really changes

• Callbacks to answer AJAX calls

• Just a .js file – unobtrusive JavaScript

• Drupal: Form API widgets, drupal_add_js()

Page 119: jQuery - e-book · PDF file3/23/2007 · • Navigate or query the document tree: ... • Drupal core JS rewritten to use jQuery: Less code! Attractive Platform. Attractive Platform

Client-Side

Page 120: jQuery - e-book · PDF file3/23/2007 · • Navigate or query the document tree: ... • Drupal core JS rewritten to use jQuery: Less code! Attractive Platform. Attractive Platform

Client-Side

• Namespace your methods

Page 121: jQuery - e-book · PDF file3/23/2007 · • Navigate or query the document tree: ... • Drupal core JS rewritten to use jQuery: Less code! Attractive Platform. Attractive Platform

Client-Side

• Namespace your methods

• jQuery is included

Page 122: jQuery - e-book · PDF file3/23/2007 · • Navigate or query the document tree: ... • Drupal core JS rewritten to use jQuery: Less code! Attractive Platform. Attractive Platform

Client-Side

• Namespace your methods

• jQuery is included

• Drupal core JS rewritten to use jQuery:

Less code!

Page 123: jQuery - e-book · PDF file3/23/2007 · • Navigate or query the document tree: ... • Drupal core JS rewritten to use jQuery: Less code! Attractive Platform. Attractive Platform

Attractive Platform

Page 124: jQuery - e-book · PDF file3/23/2007 · • Navigate or query the document tree: ... • Drupal core JS rewritten to use jQuery: Less code! Attractive Platform. Attractive Platform

Attractive Platform

• Satisfies demand for ‘bells and whistles’

Page 125: jQuery - e-book · PDF file3/23/2007 · • Navigate or query the document tree: ... • Drupal core JS rewritten to use jQuery: Less code! Attractive Platform. Attractive Platform

Attractive Platform

• Satisfies demand for ‘bells and whistles’

• Solid base for Drupal core

Page 126: jQuery - e-book · PDF file3/23/2007 · • Navigate or query the document tree: ... • Drupal core JS rewritten to use jQuery: Less code! Attractive Platform. Attractive Platform

Attractive Platform

• Satisfies demand for ‘bells and whistles’

• Solid base for Drupal core

• Dedicated jQuery community

Page 127: jQuery - e-book · PDF file3/23/2007 · • Navigate or query the document tree: ... • Drupal core JS rewritten to use jQuery: Less code! Attractive Platform. Attractive Platform

Attractive Platform

• Satisfies demand for ‘bells and whistles’

• Solid base for Drupal core

• Dedicated jQuery community

• Huge array of plug-ins

Page 128: jQuery - e-book · PDF file3/23/2007 · • Navigate or query the document tree: ... • Drupal core JS rewritten to use jQuery: Less code! Attractive Platform. Attractive Platform

Attractive Platform

• Satisfies demand for ‘bells and whistles’

• Solid base for Drupal core

• Dedicated jQuery community

• Huge array of plug-ins

• JS wizardry not needed

Page 129: jQuery - e-book · PDF file3/23/2007 · • Navigate or query the document tree: ... • Drupal core JS rewritten to use jQuery: Less code! Attractive Platform. Attractive Platform

Caveats

Page 130: jQuery - e-book · PDF file3/23/2007 · • Navigate or query the document tree: ... • Drupal core JS rewritten to use jQuery: Less code! Attractive Platform. Attractive Platform

Caveats

• Must be accessible

Page 131: jQuery - e-book · PDF file3/23/2007 · • Navigate or query the document tree: ... • Drupal core JS rewritten to use jQuery: Less code! Attractive Platform. Attractive Platform

Caveats

• Must be accessible

• Must degrade

Page 132: jQuery - e-book · PDF file3/23/2007 · • Navigate or query the document tree: ... • Drupal core JS rewritten to use jQuery: Less code! Attractive Platform. Attractive Platform

Caveats

• Must be accessible

• Must degrade

• Especially for search engines

Page 133: jQuery - e-book · PDF file3/23/2007 · • Navigate or query the document tree: ... • Drupal core JS rewritten to use jQuery: Less code! Attractive Platform. Attractive Platform

Caveats

• Must be accessible

• Must degrade

• Especially for search engines

• Slow if used badly

Page 134: jQuery - e-book · PDF file3/23/2007 · • Navigate or query the document tree: ... • Drupal core JS rewritten to use jQuery: Less code! Attractive Platform. Attractive Platform

Live DemoUsing Firebug for Firefox