SlideShare a Scribd company logo
points & badges
How does this work?
flight time
video lessons
challenges
3:00
points & badges
In order to learn jQuery you need to know:
☑
☑
HTML
CSS
JavaScript
content
style
behavior
1level
What is jQuery?
What you can do with jQuery
1.1 What is jQuery?
reveal interface elements
What you can do with jQuery
1.1 What is jQuery?
change content based on user actions
What you can do with jQuery
1.1 What is jQuery?
toggle CSS classes to highlight an element
talk
animate
listen
change
find
jQuery makes it easy to:
1.1 What is jQuery?
elements in an HTML document
HTML content
to what a user does and react accordingly
content on the page
over the network to fetch new content
HTML document
Changing content
How can we modify the text
of the <h1> element?
1.1 What is jQuery?
<!DOCTYPE html>
<html>
<head>
<title>jQuery Adventures</title>
</head>
<body>
<h1>Where do you want to go?</h1>
<p>Plan your next adventure.</p>
</body>
</html>
find it
change it
HTML document
Finding the proper HTML
How can we search
through our html?
We need to understand how our browser
organizes the HTML it receives.
1.1 What is jQuery?
<!DOCTYPE html>
<html>
<head>
<title>jQuery Adventures</title>
</head>
<body>
<h1>Where do you want to go?</h1>
<p>Plan your next adventure.</p>
</body>
</html>
find it
Document Object Model
A tree-like structure created by browsers so we can
quickly find HTML Elements using JavaScript.
1.1 What is jQuery?
“DOM”
Loading HTML into the DOM
DOM
browser
1.1 What is jQuery?
HTML document
100%0% 50%
<!DOCTYPE html>
<html>
<head>
<title>jQuery Adventures</title>
</head>
<body>
<h1>Where do you want to go?</h1>
<p>Plan your next adventure.</p>
</body>
</html>
html
head
body
title
h1
p
jQuery Adven...
element textnode types:
The DOM
DOCUMENT
Where do...
Plan your...
Inside the DOM, HTML elements become “nodes”
which have relationships with one another.
What does that DOM structure look like?
1.1 What is jQuery?
HTML document
<!DOCTYPE html>
<html>
<head>
<title>jQuery Adventures</title>
</head>
<body>
<h1>Where do you want to go?</h1>
<p>Plan your next adventure.</p>
</body>
</html>
html
head
body
title
h1
p
jQuery Adven...
element textnode types:
The DOM
DOCUMENT
Where do...
Plan your...
How do we search through the DOM?
1.1 What is jQuery?
JavaScript
JavaScript gives developers a
language to interact with the DOM.
JavaScript
How do we find things using the DOM?
1.1 What is jQuery?
HTML
Web Server
Requests a Webpage
Sends the HTML
HTML
JavaScript
+ other files needed
to load that page
DOM
Loads into
Interacts with
Web Browser
DOM
DOM
DOM
DOM
DOMJavaScript
each browser has a slightly
different DOM interface
Of course, there’s a catch
1.1 What is jQuery?
DOM
If our JavaScript uses jQuery to interact
with the DOM then it will work on most
modern browsers.
DOM
DOM
DOM
DOM
jQuery to the rescue!
1.1 What is jQuery?
JavaScript
Basic jQuery usage
this is the jQuery function
1.1 What is jQuery?
jQuery(<code>);
JavaScript
How jQuery Accesses The DOM
1.1 What is jQuery?
jQuery(document);
The DOM
But how can we search through the DOM?
JavaScript
h1 { font-size: 3em; }
CSS selectors
p { color: blue; }
1.1 What is jQuery?
<!DOCTYPE html>
<html>
<head>
<title>jQuery Adventures</title>
</head>
<body>
<h1>Where do you want to go?</h1>
<p>Plan your next adventure.</p>
</body>
</html>
HTML document
We need to use CSS selectors
Using the jQuery function to find nodes
jQuery("h1");
jQuery("p");
1.1 What is jQuery?
<!DOCTYPE html>
<html>
<head>
<title>jQuery Adventures</title>
</head>
<body>
<h1>Where do you want to go?</h1>
<p>Plan your next adventure.</p>
</body>
</html>
HTML document jQuery selectors
$("h1");
$("p");
= short & sweet
syntax
Changing the content of an element
<!DOCTYPE html>
<html>
<head>
<title>jQuery Adventures</title>
</head>
<body>
<h1>Where do you want to go?</h1>
<p>Plan your next adventure.</p>
</body>
</html>
HTML document
1.1 What is jQuery?
How can we modify the text
of the <h1> element?
find it
change it
Selecting by HTML element name
html
head
body
title
h1
p
jQuery Adv...
DOM representation of the document
DOCUMENT
Where do...
Plan your...
1.1 What is jQuery?
<!DOCTYPE html>
<html>
<head>
<title>jQuery Adventures</title>
</head>
<body>
<h1>Where do you want to go?</h1>
<p>Plan your next adventure.</p>
</body>
</html>
HTML document
Selecting by HTML element name
$("h1")
html
head
body
title
h1h1
p
jQuery Adv...
DOM representation of the document
DOCUMENT
Where do...
Plan your...
1.1 What is jQuery?
;
"Where do you want to go"
Fetching an element’s text
1.1 What is jQuery?
html
head
body
title
h1
p
jQuery Adv...
DOM representation of the document
DOCUMENT
Plan your...
Where do...
text() is a method offered by jQuery
($("h1").text );
Modifying an element’s text
html
head
body
title
h1
p
jQuery Adv...
DOM representation of the document
DOCUMENT
Where to?
Plan your...
1.1 What is jQuery?
text() also allows to modify the text node
$("h1").text( );"Where to?"
DOM
JavaScript may execute before the DOM loads
HTML
1.1 What is jQuery?
100%0% 50%
$("h1").text( );"Where to?"
We need to make sure the DOM has finished loading the
HTML content before we can reliably use jQuery.
h1 wasn’t in the DOM yet!
DOM
“I’m ready!”
Listen for “I’m ready” then run <code>
The DOM ready event
HTML
1.1 What is jQuery?
100%0% 50%
How can we listen for this signal?
DOM
“I’m ready!”
Listening for document ready
1.1 What is jQuery?
jQuery(document).ready(function(){
});
Will only run this code once the DOM is “ready”
<code>
Our completed code
1.1 What is jQuery?
jQuery(document).ready(function(){
});
$("h1").text("Where to?");
Using jQuery
Getting started
<script src="jquery.min.js"></script>
<script src="application.js"></script>
1.2 Using jQuery
download jQuery
load it in your HTML document
1
2
start using it3
find them
modify their text
Changing multiple elements at once
HTML document
How do we change the text of
every <li> in this page?
<h1>Where do you want to go?</h1>
<h2>Travel Destinations</h2>
<p>Plan your next adventure.</p>
<ul id="destinations">
<li>Rome</li>
<li>Paris</li>
<li class='promo'>Rio</li>
</ul>
1.2 Using jQuery
Load HTML into the DOM
HTML document
body
h1
h2
Where do...
Plan your...
1.2 Using jQuery
<h1>Where do you want to go?</h1>
<h2>Travel Destinations</h2>
<p>Plan your next adventure.</p>
<ul id="destinations">
<li>Rome</li>
<li>Paris</li>
<li class='promo'>Rio</li>
</ul> ul
Rome
li
Paris
li
Rio
li
Selecting multiple elements
$("li")
HTML document
body
h1
li
li
li
h2
Where do...
Plan your...
1.2 Using jQuery
ul
Rome
li
Paris
li
Rio
li;
<h1>Where do you want to go?</h1>
<h2>Travel Destinations</h2>
<p>Plan your next adventure.</p>
<ul id="destinations">
<li>Rome</li>
<li>Paris</li>
<li class='promo'>Rio</li>
</ul>
Modifying each of their text nodes
HTML document
body
h1
h2
Where do...
Plan your...
1.2 Using jQuery
ul
li
li
li.text("Orlando");$("li")
Rome
Paris
Rio
<h1>Where do you want to go?</h1>
<h2>Travel Destinations</h2>
<p>Plan your next adventure.</p>
<ul id="destinations">
<li>Rome</li>
<li>Paris</li>
<li class='promo'>Rio</li>
</ul>
Orlando
Orlando
Orlando
We can find elements by ID or Class
p { ... }
#container { ... }
.articles { ... }
$("p");
$("#container");
$(".articles");
1.2 Using jQuery
CSS jQuery
find it using the ID
Changing multiple elements at once
HTML document
How do we specifically select the <ul>
that has a “destinations” ID?
<h1>Where do you want to go?</h1>
<h2>Travel Destinations</h2>
<p>Plan your next adventure.</p>
<ul id="destinations">
<li>Rome</li>
<li>Paris</li>
<li class='promo'>Rio</li>
</ul>
1.2 Using jQuery
Selecting by unique ID
$("#destinations");
HTML document
body
h1
h2
Where do...
Plan your...
1.2 Using jQuery
<h1>Where do you want to go?</h1>
<h2>Travel Destinations</h2>
<p>Plan your next adventure.</p>
<ul id="destinations">
<li>Rome</li>
<li>Paris</li>
<li class='promo'>Rio</li>
</ul> ul
Rome
li
Paris
li
Rio
li
id="destinations"
class="promo"
ul
find it using the class
Changing multiple elements at once
HTML document
How can we select just the <li> that
has a “promo” class attribute?
<h1>Where do you want to go?</h1>
<h2>Travel Destinations</h2>
<p>Plan your next adventure.</p>
<ul id="destinations">
<li>Rome</li>
<li>Paris</li>
<li class='promo'>Rio</li>
</ul>
1.2 Using jQuery
Selecting by Class Name
$(".promo");
HTML document
body
h1
h2
Where do...
Plan your...
1.2 Using jQuery
<h1>Where do you want to go?</h1>
<h2>Travel Destinations</h2>
<p>Plan your next adventure.</p>
<ul id="destinations">
<li>Rome</li>
<li>Paris</li>
<li class='promo'>Rio</li>
</ul> ul
Rome
li
Paris
li
Rio
li class="promo"
id="destinations"
li
2level
Searching the DOM
2.1 Searching the DOM
Selecting descendants
HTML document
<h1>Where do you want to go?</h1>
<h2>Travel Destinations</h2>
<p>Plan your next adventure.</p>
<ul id="destinations">
<li>Rome</li>
<li>Paris</li>
<li class='promo'>Rio</li>
</ul>
How do we find the <li> elements that are
inside of the <ul> with a “destinations” ID?
descendant selector
li
li
li
<h1>Where do you want to go?</h1>
<h2>Travel Destinations</h2>
<p>Plan your next adventure.</p>
<ul id="destinations">
<li>Paris</li>
<li>Rome</li>
<li class='promo'>Rio</li>
</ul>
Using the descendant selector
$("#destinations li");
HTML document
body
h1
h2
Where do...
Plan your...
ul
Rome
li
Paris
li
Rio
li
the space matters
2.1 Searching the DOM
parent descendant
<li>Paris</li>
<li>Rome</li>
<li class='promo'>Rio</li>
<h1>Where do you want to go?</h1>
<h2>Travel Destinations</h2>
<p>Plan your next adventure.</p>
<ul id="destinations">
<li>
<ul id="france">
</ul>
</li>
</ul>
<h1>Where do you want to go?</h1>
<h2>Travel Destinations</h2>
<p>Plan your next adventure.</p>
<ul id="destinations">
HTML document
How do we find only the <li> elements that are
children of the “destinations” <ul>?
descendant selector?
2.1 Searching the DOM
Selecting direct children
HTML document
ul
li
li
Paris
li
li
li
li
li
Selecting direct children
$("#destinations li");
HTML document
body
ul
Rome
Rio
li
2.1 Searching the DOM
...
we don’t want this
<h1>Where do you want to go?</h1>
<h2>Travel Destinations</h2>
<p>Plan your next adventure.</p>
<ul id="destinations">
<li>Rome</li>
<li>
<ul id="france">
<li>Paris</li>
</ul>
</li>
<li class='promo'>Rio</li>
</ul>
How do we find only the <li> elements that are
direct children of the “destinations” <ul> then?
child selector
Selecting only direct children
HTML document
<h1>Where do you want to go?</h1>
<h2>Travel Destinations</h2>
<p>Plan your next adventure.</p>
<ul id="destinations">
<li>Rome</li>
<li>
<ul id="france">
<li>Paris</li>
</ul>
</li>
<li class='promo'>Rio</li>
</div>
2.1 Searching the DOM
li
li
Paris
ul
li
li
li
li
body
ul
Rome
Rio
li
...
Selecting only direct children
$("#destinations > li");
HTML document
the sign matters
parent child
not selected
<h1>Where do you want to go?</h1>
<h2>Travel Destinations</h2>
<p>Plan your next adventure.</p>
<ul id="destinations">
<li>Rome</li>
<li>
<ul id="france">
<li>Paris</li>
</ul>
</li>
<li class='promo'>Rio</li>
</ul>
How do we find only elements
with either a “promo” class or a “france” ID
multiple selector
Selecting multiple elements
HTML document
<h1>Where do you want to go?</h1>
<h2>Travel Destinations</h2>
<p>Plan your next adventure.</p>
<ul id="destinations">
<li>Rome</li>
<li>
<ul id="france">
<li>Paris</li>
</ul>
</li>
<li class='promo'>Rio</li>
</ul>
2.1 Searching the DOM
ul
lili
ul
Selecting multiple elements
$(".promo, #france");
HTML document
<h1>Where do you want to go?</h1>
<h2>Travel Destinations</h2>
<p>Plan your next adventure.</p>
<ul id="destinations">
<li>Rome</li>
<li>
<ul id="france">
<li>Paris</li>
</ul>
</li>
<li class='promo'>Rio</li>
</ul>
the comma matters
li
li
Paris
li
body
ul
Rome
Rio
...
li
lili
li
body
h1
h2
Where do...
Plan your...
ul
Rome
Paris
li
Rio
$("#destinations li:first");
CSS-like pseudo classes
filter
$("#destinations li:last");
2.1 Searching the DOM
li
li
body
h1
h2
Where do...
Plan your...
ul
Rome
Paris
li
Rio
li
CSS-like pseudo classes
$("#destinations li:odd");
$("#destinations li:even");
#0
#1
#2
watch out, the index starts at 0
2.1 Searching the DOM
li
li
Traversing
2.2 Traversing
Walking the DOM by traversing it
HTML document
<h1>Where do you want to go?</h1>
<h2>Travel Destinations</h2>
<p>Plan your next adventure.</p>
<ul id="destinations">
<li>Rome</li>
<li>Paris</li>
<li class='promo'>Rio</li>
</ul>
Can we find all the <li> elements that
the “destinations” list contains without
using a descendant selector?
filter by traversing
li
li
lili
li
li
Filtering by traversing
$("#destinations li");
$("#destinations").find("li");
It takes a bit more code, but it’s faster.
body
h1
h2
Where do...
Plan your...
ul
Rome
Paris
Rio
2.2 Traversing
selection traversal
lili
Filtering by traversing
$("li:first");
$("li").first();
body
h1
h2
Where do...
Plan your...
ul
Rome
Paris
li
Rio
li
2.2 Traversing
lili
Filtering by traversing
$("li:last");
$("li").last();
body
h1
h2
Where do...
Plan your...
ul
Rome
li
Paris
li
Rio
2.2 Traversing
HTML document
<h1>Where do you want to go?</h1>
<h2>Travel Destinations</h2>
<p>Plan your next adventure.</p>
<ul id="destinations">
<li>Rome</li>
<li>Paris</li>
<li class='promo'>Rio</li>
</ul>
Walking the DOM
Can we find the middle list item, knowing
there is no filter to find it unlike :first or :last?
traversing
2.2 Traversing
lili
$("li").first(); body
h1
h2
Where do...
Plan your...
ul
Rome
Paris
li
Rio
li
Walking the DOM
2.2 Traversing
lili
$("li").first(); body
h1
h2
Where do...
Plan your...
ul
Rome
li
Paris
Rio
li
$("li").first().next();
Walking the DOM
li
2.2 Traversing
lili
$("li").first(); body
h1
h2
Where do...
Plan your...
ul
Rome
li
Paris
Rio
li
$("li").first().next();
$("li").first().next().prev();
Walking the DOM
li
2.2 Traversing
HTML document
<h1>Where do you want to go?</h1>
<h2>Travel Destinations</h2>
<p>Plan your next adventure.</p>
<ul id="destinations">
<li>Rome</li>
<li>Paris</li>
<li class='promo'>Rio</li>
</ul>
Walking up the DOM
If we started by selecting a child, can we figure
out what element is its direct parent?
traversing up
2.2 Traversing
lili
$("li").first(); body
h1
h2
Where do...
Plan your...
ul
Rome
Paris
li
Rio
li
Walking up the DOM
2.2 Traversing
ul
$("li").first(); body
h1
h2
Where do...
Plan your...
ul
Rome
li
Paris
li
Rio
li
$("li").first().parent();
Walking up the DOM
li
2.2 Traversing
Walking down the DOM
HTML document
<h1>Where do you want to go?</h1>
<h2>Travel Destinations</h2>
<p>Plan your next adventure.</p>
<ul id="destinations">
<li>Rome</li>
<ul id="france">
<li>Paris</li>
</ul>
<li class='promo'>Rio</li>
</ul>
With a parent that has many children who in
turn have their own children, how could we
find only the first generation of children?
traversing down
2.2 Traversing
Walking the DOM up and down
$("#destinations").children("li");
children(), unlike find(), only selects direct children
ul
li
li
Paris
li
li
li
li
body
ul
Rome
Rio
li
...
id="destinations"
2.2 Traversing
3level
Working with the DOM
3.1 Manipulating the DOM
remove a DOM node
li
DOM representation of the document
DOCUMENT
Hawaiian Vac...
h2
Get Price
button
p
$399.99
Appending to the DOM
class="vacation"
append a new DOM node1
2
3.1 Manipulating the DOM
application.js
Appending to the DOM
DOCUMENT
h2
Get Price
button
p
$399.99
li
var price = $('<p>From $399.99</p>');
var price = "From $399.99";
var price = "<p>From $399.99</p>";
Creates a node but doesn’t add it to the DOM
Price node (not in the DOM yet)
$(document).ready(function() {
// create a <p> node with the price
});
3.1 Manipulating the DOM
class="vacation"
Hawaiian Vac...
DOCUMENT
h2
Get Price
button
li
application.js
.append(<element>)
.after(<element>) .before(<element>)
.prepend(<element>)
Appending to the DOM
ways to add this price node to the DOM
var price = $('<p>From $399.99</p>');
$(document).ready(function() {
});
Price node (not in the DOM yet)
p
$399.99
3.1 Manipulating the DOM
class="vacation"
Hawaiian Vac...
DOCUMENT
h2
Get Price
button
li
Before
application.js
$('.vacation').before(price);
$(document).ready(function() {
var price = $('<p>From $399.99</p>');
});
3.1 Manipulating the DOM
class="vacation"
Hawaiian Vac...
p
$399.99
Puts the price node before .vacation
li
DOCUMENT
h2
Get Price
button
p
$399.99
After
application.js
$('#vacation').before(price);
Puts the price node after .vacation
$(document).ready(function() {
var price = $('<p>From $399.99</p>');
});
$('.vacation').after(price);
3.1 Manipulating the DOM
class="vacation"
Hawaiian Vac...
button
var price = $('<p>From $399.99</p>');
$('.vacation').prepend(price);
application.js
Adds the node to the top of .vacation
$(document).ready(function() {
});
Prepend
li
DOCUMENT
p
$399.99
h2
Get Price
button
3.1 Manipulating the DOM
class="vacation"
Hawaiian Vac...
application.js
3.1 Manipulating the DOM
Prepend and Append
Puts the price node at the bottom of .vacation
$('.vacation').append(price);
$(document).ready(function() {
var price = $('<p>From $399.99</p>');
});
li
DOCUMENT
p
$399.99
class="vacation"
h2
Get Price
button
Hawaiian Vac...
application.js
$(document).ready(function() {
3.1 Manipulating the DOM
Removing from the DOM
Removes the <button> from the DOM
$('button').remove();
var price = $('<p>From $399.99</p>');
$('.vacation').append(price);
});
li
DOCUMENT
p
$399.99
class="vacation"
h2
Get Price
button
Hawaiian Vac...
3.1 Manipulating the DOM
DOCUMENT
h2
Get Price
button
li
.appendTo(<element>)
.insertAfter(<element>) .insertBefore(<element>)
.prependTo(<element>)
Appending to the DOM
Price node (not in the DOM yet)
p
$399.99
3.1 Manipulating the DOM
class="vacation"
Hawaiian Vac...
application.js
$(document).ready(function() {
var price = $('<p>From $399.99</p>');
$('.vacation').append(price);
$('button').remove();
});
price.appendTo($('.vacation'));
Appends in the same place
Acting on Interaction
$(document).ready(<event handler function>);
Passing in a function
function() {
// executing the function runs the code
// between the braces
}
The ready method takes an event handler function as argument
We create a function with the function keyword
And we pass this function as an argument to the ready method.
3.2 Acting on Interaction
$(document).ready(function() {
// this function runs when the DOM is ready
});
3.2 Acting on Interaction
application.js
Watching for Click
DOCUMENT
Hawaiian Vacation
h2
Get Price
button
li class="vacation"
Target all buttons
Watch for any clicks
Run the code inside of this function
3.2 Acting on Interaction
$('button').on('click', function() {
// runs when any button is clicked
});
$(document).ready(function() {
// runs when the DOM is ready
});
.on(<event>, <event handler>)
jQuery Object Methods
application.js
Removing from the DOM
DOCUMENT
Hawaiian Vacation
h2
Get Price
button
li
runs when the DOM is ready
runs when a button is clicked
3.2 Acting on Interaction
$(document).ready(function() {
$('button').on('click', function() {
});
// run this function on click
});
class="vacation"
application.js
Removing from the DOM
3.2 Acting on Interaction
var price = $('<p>From $399.99</p>');
$('.vacation').append(price);
$('button').remove();
$(document).ready(function() {
$('button').on('click', function() {
});
});
DOCUMENT
Hawaiian Vacation
h2
Get Price
button
p
$399.99
li class="vacation"
Now the price will be shown when we click the button
Refactor using Traversing
What if there are multiple vacation packages?
$(document).ready(function() {
$('button').on('click', function() {
var price = $('<p>From $399.99</p>');
$('.vacation').append(price);
application.js
The price will be appended to
both .vacation elements
3.3 Refactor Using Traversing
Working, but with Errors
ul
DOCUMENT
li
p
class="vacation"
li
p
class="vacation"
div id="vacations"
Every button will be removed
$('button').remove();
});
});
button
buttonbutton
button
$(this).remove();
An Introduction to $(this)
application.js
ul
DOCUMENT
li
button
p
li
button
p
div
If clicked, the button will be ‘this’
this.remove();
Not a jQuery object, needs to be converted
3.3 Refactor Using Traversing
$(document).ready(function() {
$('button').on('click', function() {
var price = $('<p>From $399.99</p>');
$('.vacation').append(price);
$('button').remove();
});
});
id="vacations"
class="vacation"
class="vacation"
application.js
An Introduction to $(this)
3.3 Refactor Using Traversing
ul
DOCUMENT
li
button
p
li
button
p
div
Only removes whichever button was clicked
$(document).ready(function() {
$('button').on('click', function() {
var price = $('<p>From $399.99</p>');
$('.vacation').append(price);
});
});
$(this).remove();
class="vacation"
class="vacation"
id="vacations"
The clicked button will now be removed
application.js
Adds the <p> node after the <button>
Traversing from $(this)
ul
DOCUMENT
Hawaiian Vac...
li
h2
Get Price
button
p
$399.99
class="vacation"
3.3 Refactor Using Traversing
$(this).after(price);
$(document).ready(function() {
$('button').on('click', function() {
var price = $('<p>From $399.99</p>');
$(this).remove();
});
});
$('.vacation').append(price);
application.js
Traversing from $(this)
3.3 Refactor Using Traversing
Add the price as a sibling after button
ul
DOCUMENT
Hawaiian Vac...
li
h2
Get Price
button
$(document).ready(function() {
$('button').on('click', function() {
var price = $('<p>From $399.99</p>');
$(this).remove();
});
});
$(this).after(price);
class="vacation"
p
$399.99
application.js
What if the button is moved?
ul
DOCUMENT
Hawaiian Vac...
li
h2
Get Price
button
p
$399.99
3.3 Refactor Using Traversing
div
If the button is moved, the price will be moved
How do we keep the
price as a child of <li>?
$(document).ready(function() {
$('button').on('click', function() {
var price = $('<p>From $399.99</p>');
$(this).remove();
});
});
$(this).after(price);
class="vacation"
application.js
Using .closest(<selector>)
3.3 Refactor Using Traversing
ul
DOCUMENT
Hawaiian Vac...
li
h2
Get Price
button
div
$(this).after(price);
$(this).parents('.vacation').append(price);
$(this).parent().parent().append(price);
p
$399.99
$(this).closest('.vacation').append(price);
class="vacation"
application.js
$(document).ready(function() {
$('button').on('click', function() {
var price = $('<p>From $399.99</p>');
$(this).remove();
});
});
ul
DOCUMENT
Hawaiian Vac...
li
h2
Get Price
button
p
$399.99
Our Finished Handler
Adds the <p> node at the bottom of .vacation
3.3 Refactor Using Traversing
$(this).closest('.vacation').append(price);
class="vacation"
The prices will be added at the right place
Traversing and Filtering
How do we allow vacations to have different prices?
<li class="vacation onsale"
<h3>Hawaiian Vacation</h3>
<button>Get Price</button>
<ul class='comments'>
<li>Amazing deal!</li>
<li>Want to go!</li>
</ul>
</li>
index.html
$('.vacation').first().data('price');
All data attributes begin with ‘data-’
"399.99"
Tackling the HTML
data-price='399.99'>
.data(<name>)
jQuery Object Methods
.data(<name>, <value>)
3.4 Traversing & Filtering
var amount = $(this).closest('.vacation').data('price');
application.js
Reads from the data-price attribute
Joins two strings to create the price
Refactoring ‘Get Price’
$(document).ready(function() {
$('button').on('click', function() {
var price = $('<p>From $399.99</p>');
$(this).closest('.vacation').append(price);
$(this).remove();
});
});
var price = $('<p>From $'+amount+'</p>');
3.4 Traversing & Filtering
application.js
Refactoring ‘Get Price’
$(document).ready(function() {
$('button').on('click', function() {
$(this).closest('.vacation').append(price);
$(this).remove();
});
}); Each vacation can have its own price
var amount = $(this).closest('.vacation').data('price');
var price = $('<p>From $'+amount+'</p>');
3.4 Traversing & Filtering
var amount = $(this).closest('.vacation').data('price');
$(this).closest('.vacation').append(price);
application.js
Reusing jQuery Objects
$(document).ready(function() {
$('button').on('click', function() {
var vacation = $(this).closest('.vacation');
var amount = vacation.data('price');
vacation.append(price);
var price = $('<p>From $'+amount+'</p>');
$(this).remove();
});
});
3.4 Traversing & Filtering
vacation.append(price);
var amount = vacation.data('price');
application.js
Reusing jQuery Objects
var vacation = $(this).closest('.vacation');
$(document).ready(function() {
$('button').on('click', function() {
var price = $('<p>From $'+amount+'</p>');
$(this).remove();
});
});
We’ll only query the DOM
once for this element
3.4 Traversing & Filtering
Each vacation can have its dynamic own price now
application.js
$('.vacation').on('click', 'button', function() {});
If we add new buttons anywhere, they will trigger this click handler
$('.vacation button').on('click', function() {});
On With a Selector
Only target a ‘button’
if it’s inside a ‘.vacation’
$(document).ready(function() {
$('button').on('click', function() {
...
});
});
3.4 Traversing & Filtering
We’ll implement our new filters next
<div id='filters'>
...
<button class='onsale-filter'>On Sale Now</button>
<button class='expiring-filter'>Expiring</button>
...
</div>
index.html
We’ll highlight vacations with these traits
Filtering HTML
We’ll write 2 event handlers for our buttons
3.4 Traversing & Filtering
application.js
Filtering for Vacations On sale
div
DOCUMENT
button class="onsale-filter"
button class="expiring-filter"
// find all vacations that are on-sale
// add a class to these vacations
});
$('#filters').on('click', '.onsale-filter',
function() { id="filters"
3.4 Traversing & Filtering
Filtering for Vacations On sale
ul
DOCUMENT
li
ul
li
li
li
class="vacation onsale"
class="vacation"
class="vacation"
class="comments"
$('.vacation.onsale')
$('.vacation').filter('.onsale')
Finds elements with a class
of .vacation and .onsale
application.js
// find all vacations that are on-sale
// add a class to these vacations
});
$('#filters').on('click', '.onsale-filter',
function() {
lili
3.4 Traversing & Filtering
Class Manipulation
application.js
Filtering for Vacations On sale
$('.vacation').filter('.onsale').addClass('highlighted');
.addClass(<class>) .removeClass(<class>)
$('#filters').on('click', '.onsale-filter',
function() {
$('.vacation').filter('.onsale')
// add a class to these vacations
});
ul
DOCUMENT
li
ul
li
li
li
lili
3.4 Traversing & Filtering
class="vacation onsale"
class="vacation"
class="vacation"
class="comments"
application.js
Filtering for Vacations On sale
Finds only the right vacations Adds a class of ‘highlighted’
The same can be done for our expiring filter
$('#filters').on('click', '.onsale-filter', function() {
$('.vacation').filter('.onsale').addClass('highlighted');
});
$('.vacation').filter('.expiring').addClass('highlighted');
});
$('#filters').on('click', '.expiring-filter', function() {
3.4 Traversing & Filtering
How do we make sure not all vacations are highlighted?
application.js
Unhighlighting Vacations
$('#filters').on('click', '.onsale-filter', function() {
$('.vacation').filter('.onsale').addClass('highlighted');
});
$('.highlighted').removeClass('highlighted');
Remove the highlighted
class before adding it back
3.4 Traversing & Filtering
We clear the highlighted class on click, only
highlighting the targeted vacations
4level
On DOM Load
4.1 On DOM Load
.ticket {
display: none;
}
index.html
Hide ticket on page load
Adding Ticket Confirmation
find the ticket
show the ticket
watch for click
Clicking this button...
...will show the ticket
<li class="confirmation">
...
<button>FLIGHT DETAILS</button>
<ul class="ticket">...</ul>
</li>
4.1 On DOM Load
application.js
$('.confirmation').on('click', 'button', function() {
});
Using slideDown to Show Elements
index.html
jQuery Object Methods
.slideDown()
.slideUp()
.slideToggle()
$(this).closest('.confirmation').find('.ticket').slideDown();
<li class="confirmation">
...
<ul class="ticket">...</ul>
</li>
<button>FLIGHT DETAILS</button>
4.1 On DOM Load
Searches up through ancestors Searches down through children
Why doesn’t the button work?
alert('Hello');
Alert and Length
4.1 On DOM Load
$('li').length;
3
To query how many nodes are on a page.
$('.confirmation').on('click', 'button', function() {
$(this).closest('.confirmation').find('.ticket').slideDown();
});
application.js
alert($('button').length);
The alert dialog
Debugging with Alert
4.1 On DOM Load
application.js
$(document).ready(function() {
});
The button is found after the DOM has loaded
We Forgot $(document).ready() already
alert($('button').length);
$('.confirmation').on('click', 'button', function() {
$(this).closest('.confirmation').find('.ticket').slideDown();
});
4.1 On DOM Load
Now that the DOM has loaded, jQuery can find our button
Expanding on on()
What if we also want to show the ticket when they
hover over the <h3> tag?
application.js
$(document).ready(function() {
$('.confirmation').on('click', 'button', function() {
$(this).closest('.confirmation').find('.ticket').slideDown();
});
});
What event should we watch for?
Deciding on an Event
$('.confirmation').on('?', 'h3', function() {
$(this).closest('.confirmation').find('.ticket').slideDown();
});
Fires when the mouse is first positioned over the element
click
Mouse Events
dblclick
focusin
focusout
mouseover
mouseup mouseout mouseleave
mousemove mouseentermousedown
4.2 Expanding on on()
application.js
$(document).ready(function() {
$('.confirmation').on('click', 'button', function() {
$(this).closest('.confirmation').find('.ticket').slideDown();
});
$('.confirmation').on( , 'h3', function() {
$(this).closest('.confirmation').find('.ticket').slideDown();
});
});
Mouse Events
Show the ticket when the mouse
is positioned over the h3
'mouseenter'
4.2 Expanding on on()
We have two ways of showing the ticket now
application.js
$(document).ready(function() {
$('.confirmation').on('click', 'button', function() {
$(this).closest('.confirmation').find('.ticket').slideDown();
});
$('.confirmation').on('mouseenter', 'h3', function() {
$(this).closest('.confirmation').find('.ticket').slideDown();
});
});
Extract out and name our event handler
Refactoring Handler Functions
This code is duplicated, how can we refactor this?
showTicket () {function
$(this).closest('.confirmation').find('.ticket').slideDown();
}
4.2 Expanding on on()
application.js
$(document).ready(function() {
$('.confirmation').on('click', 'button', showTicket);
$('.confirmation').on('mouseenter', 'h3', showTicket);
});
Don’t add () at the end - that would execute the function immediately
Refactoring Handler Functions
showTicket () {function
$(this).closest('.confirmation').find('.ticket').slideDown();
}
4.2 Expanding on on()
Now the exact same code is run for both events
Keyboard Events
Changing this “Tickets” input field should recalculate the total
<div class="vacation" data-price='399.99'>
<h3>Hawaiian Vacation</h3>
<p>$399.99 per ticket</p>
<p>
Tickets:
<input type='number' class='quantity' value='1' />
</p>
</div>
<p>Total Price: $<span id='total'>399.99</span></p>
index.html
...we’ll update the calculated price here
When this updates...
Trip Planner Page
4.3 Keyboard Events
Keyboard Events Form Events
$(document).ready(function() {
$('.vacation').on('?', '.quantity', function() {
});
});
application.js
http://api.jquery.com/category/events/keyboard-events/
http://api.jquery.com/category/events/form-events/
Which event should we use?
keydown
keypress
keyup
blur change
focus
select
submit
Keyboard and Form Events
4.3 Keyboard Events
$(document).ready(function() {
$('.vacation').on('keyup', '.quantity', function() {
});
});
application.js
Writing our Event Handler
DOCUMENT
li .vacation
span
p
input
#total
var price = $(this).closest('.vacation').data('price');
Returns price as a string
Use + to convert the string to a number
// Get the price for this vacation
.quantity
p
'399.99'
399.99
// Get the quantity entered
// Set the total to price * quantity
4.3 Keyboard Events
var price = +$(this).closest('.vacation').data('price');
application.js
Getting the Quantity of Tickets
DOCUMENT
li .vacation
span
p
input .quantity
p
#total
jQuery Object Methods
.val()
.val(<new value>)
Sets quantity to a number
var quantity = this.val(); Errors - not a jQuery object
var quantity = $(this).val(); Sets quantity to a string
var price = +$(this).closest('.vacation').data('price');
$(document).ready(function() {
$('.vacation').on('keyup', '.quantity', function() {
});
});
// Get the quantity entered
// Set the total to price * quantity
var quantity = +$(this).val();
2
'2'
application.js
Setting the Total Price
DOCUMENT
li .vacation
span
p
input .quantity
p
#total
You can pass a number or a string to the .text() method
$('#total').text(price * quantity);
4.3 Keyboard Events
$(document).ready(function() {
$('.vacation').on('keyup', '.quantity', function() {
});
});
// Set the total to price * quantity
var price = +$(this).closest('.vacation').data('price');
var quantity = +$(this).val();
application.js
The Completed Event Handler
DOCUMENT
li .vacation
span
p
input .quantity
p
#totalWhenever the quantity is changed, the total will be updated
4.3 Keyboard Events
$(document).ready(function() {
$('.vacation').on('keyup', '.quantity', function() {
});
});
var price = +$(this).closest('.vacation').data('price');
var quantity = +$(this).val();
$('#total').text(price * quantity);
The total changes
immediately as we wanted
Link Layover
Clicking Show Comments will cause them to fade in
Clicking this link...
Preparing for Flight
ul
DOCUMENT
Show Comments
li
a
li
ul
li
...will show the comments
.vacation
.expand
.comments
.comments {
display: none;
}
application.css
application.js
We need to write the event handler
// Find the comments ul
// Show the comments ul
$(document).ready(function() {
$('.vacation').on('click', '.expand', function() {
});
});
4.4 Link Layover
Preparing for Flight
ul
DOCUMENT
Show Comments
li
a
li
ul
li
.vacation
.expand
.comments
Find the .comments ul using traversing
$(this).closest('.vacation').find('.comments')
application.js
// Find the comments ul
// Show the comments ul
$(document).ready(function() {
$('.vacation').on('click', '.expand', function() {
});
});
4.4 Link Layover
jQuery Object Methods
Preparing for Flight
.fadeToggle().fadeIn() .fadeOut()
These are similar to the slide methods
$(document).ready(function() {
$('.vacation').on('click', '.expand', function() {
$(this).closest('.vacation')
.find('.comments')
// Show the comments ul
});
});
ul
DOCUMENT
Show Comments
li
a
li
ul
li
.vacation
.expand
.comments
application.js
4.4 Link Layover
$(document).ready(function() {
$('.vacation').on('click', '.expand', function() {
$(this).closest('.vacation')
.find('.comments')
});
});
ul
DOCUMENT
Show Comments
li
a
li
ul
li
fadeIn() .comments on first click,
fadeOut() .comments on next click.
Handling the Click
.vacation
.expand
.comments
4.4 Link Layover
application.js
.fadeToggle();
Why does the page jump to the top?
<a href='#' class='expand'>Show Comments</a>
index.html
How the Browser Handles the Click
ul
DOCUMENT
Show Comments
li
a
li
ul
li
.vacation
.expand
.comments
The click event will “bubble up”
to each parent node
4.4 Link Layover
Follows the link!
(goes to the top of the page)
});
The Event Object
Add the event parameter
application.js
DOM TREE
ul
DOCUMENT
Show Comments
li
a
li
ul
li
.vacation
.expand
.comments
$(document).ready(function() {
$('.vacation').on('click', '.expand',
function(event) {
$(this).closest('.vacation')
.find('.comments')
.fadeToggle();
});
4.4 Link Layover
event.stopPropagation()
DOM TREE
ul
DOCUMENT
Show Comments
li
a
li
ul
li
.vacation
.expand
.comments
The browser will still handle the click event but will prevent it
from “bubbling up” to each parent node.
$(document).ready(function() {
$('.vacation').on('click', '.expand',
function(event) {
event.stopPropagation();
$(this).closest('.vacation')
.find('.comments')
.fadeToggle();
});
});
4.4 Link Layover
application.js
$(document).ready(function() {
$('.vacation').on('click', '.expand',
function(event) {
$(this).closest('.vacation')
.find('.comments')
.fadeToggle();
}
);
});
The click event will “bubble up” but the browser won’t handle it
event.preventDefault()
DOM TREE
ul
DOCUMENT
Show Comments
li
a
li
ul
li
.vacation
.expand
.comments
event.preventDefault();
4.4 Link Layover
application.js
We’re preventing the default action of the browser now.
5level
Taming CSS
HTML
CSS
JavaScript
content
style
behavior
Separation of Concerns
5.1 Taming CSS
To style something based on user
interaction, which would we use?
5.1 Taming CSS
ul
DOM representation
DOCUMENT
li .vacation
div #vacations
...and allow people to click
on the <li> element
Changing our Style
p .price
Let’s make all .vacation elements clickable...
5.1 Taming CSS
application.js
Changing the Style
$(this).css('background-color', '#252b30')
.css('border-color', '1px solid #967');
$(this).css({'background-color': '#252b30',
'border-color': '1px solid #967'});
Passing in a JavaScript Object as an argument is a common jQuery pattern
ul
DOM representation
DOCUMENT
li .vacation
div #vacations
p
jQuery Object Methods
.css(<attr>, <value>)
.css(<attr>)
.css(<object>)
.price
$(this).css('background-color', '#252b30');
$(this).css('border-color', '1px solid #967');
});
});
$(document).ready(function() {
$('#vacations').on('click', '.vacation', function() {
5.1 Taming CSS
Showing the Price
ul
DOM representation
DOCUMENT
li .vacation
div #vacations
p
application.js
jQuery Object Methods
.show()
.hide()
$(this).find('.price').css('display', 'block');
.price
$(this).find('.price').show();
Same as CSS syntax, but easier to read and understand
});
});
$(document).ready(function() {
$('#vacations').on('click', '.vacation', function() {
$(this).css({'background-color': '#252b30',
'border-color': '1px solid #967'});
5.1 Taming CSS
Showing the Price
ul
DOM representation
DOCUMENT
li .vacation
div #vacations
p
application.js
.price
Highlights the Vacation Package and shows the price
});
});
$(document).ready(function() {
$('#vacations').on('click', '.vacation', function() {
$(this).find('.price').show();
$(this).css({'background-color': '#252b30',
'border-color': '1px solid #967'});
Our .vacation elements are highlighted when we click on them
5.1 Taming CSS
Moving Styles to External CSS
ul
DOM representation
DOCUMENT
li .vacation
div #vacations
p
application.js
});
});
.price
Can we move these to a CSS stylesheet?application.css
border-color: 1px solid #967;
}
.highlighted .price {
display: block;
}
$(this).css({'background-color': '#563',
'border-color': '1px solid #967'});
$(this).find('.price').show();
$(document).ready(function() {
$('#vacations').on('click', '.vacation', function() {
#563;
.highlighted {
background-color:
$(this).addClass('highlighted');
5.1 Taming CSS
Moving Styles to External CSS
application.js
});
});
It’s now much easier to manipulate with external CSS styles
$(document).ready(function() {
$('#vacations').on('click', '.vacation', function() {
ul
DOM representation
DOCUMENT
li .vacation
div #vacations
p .price
application.css
border-color: 1px solid #967;
}
.highlighted .price {
display: block;
}
#563;
.highlighted {
background-color:
$(this).addClass('highlighted');
5.1 Taming CSS
Moving Styles to External CSS
ul
DOM representation
DOCUMENT
li .vacation
div #vacations
p
application.js
$(document).ready(function() {
$('#vacations').on('click', '.vacation', function() {
$(this).addClass('highlighted');
});
});
.price
We can only show price, but how would we hide price?
$(this).toggleClass('highlighted');
jQuery Object Methods
.toggleClass()
.addClass(<class>)
.removeClass(<class>)
Adds the class if $(this) doesn’t have it, removes it if $(this) already has it
Our refactored page still works, and will be much easier to maintain
Challenges
5.1 Taming CSS
Animation
What can we do to add a bit more movement to this?
Takes in a JavaScript object
similar to the .css() method
Adding Movement
jQuery Object Methods
.animate(<object>)
ul
DOM representation
DOCUMENT
li .vacation
div #vacations
p .price
application.js
$(this).css({'top': '-10px'});
The box will jump up 10 px
$(this).animate({'top': '-10px'});
5.2 Animation
$(document).ready(function() {
$('#vacations').on('click', '.vacation', function() {
$(this).toggleClass('highlighted');
});
});
Adding Movement
ul
DOM representation
DOCUMENT
li .vacation
div #vacations
p .price
application.js
Will adjust a CSS property pixel by pixel in order to animate it
5.2 Animation
$(this).animate({'top': '-10px'});
$(document).ready(function() {
$('#vacations').on('click', '.vacation', function() {
$(this).toggleClass('highlighted');
});
});
Our animation can slide up but not slide down
Moving Back Down
ul
DOM representation
DOCUMENT
li .vacation
div #vacations
p .price
application.js
How do we set ‘top’ to ‘0px’ if a second click occurs?
“If statements” allow your code to make decisions at runtime
5.2 Animation
$(document).ready(function() {
$('#vacations').on('click', '.vacation', function() {
$(this).toggleClass('highlighted');
});
});
$(this).animate({'top': '-10px'});
} else {
// animate the vacation up
}
// animate the vacation back down
if(<vacation has the class highlighted>) {
Moving Back Down
ul
DOM representation
DOCUMENT
li .vacation
div #vacations
p .price
application.js
jQuery Object Methods
.hasClass(<class>)
$(this).hasClass('highlighted')
Returns true or false
5.2 Animation
true
;
$(document).ready(function() {
$('#vacations').on('click', '.vacation', function() {
$(this).toggleClass('highlighted');
});
});
$(this).animate({'top': '-10px'});
$(this).animate({'top': '0px'});
} else {
}
if(<vacation has the class highlighted>) {
Moving Back Down
application.js
Our vacation package will move up and down
5.2 Animation
ul
DOM representation
DOCUMENT
li .vacation
div #vacations
p .price
$(this).hasClass('highlighted')
$(document).ready(function() {
$('#vacations').on('click', '.vacation', function() {
$(this).toggleClass('highlighted');
});
});
$(this).animate({'top': '-10px'});
$(this).animate({'top': '0px'});
} else {
}
if( ) {
Could we speed this up a little? Our customers don’t have all day.
Changing the Speed
$(this).animate({'top': '-10px'});
$(this).animate({'top': '-10px'}, 400);
We can optionally pass in the speed as a
second argument to animate()
$(this).animate({'top': '-10px'}, 'fast');
$(this).animate({'top': '-10px'}, 200);
$(this).animate({'top': '-10px'}, 'slow');
$(this).animate({'top': '-10px'}, 600);
Effects methods like animate(), slideToggle() and fadeToggle()
can also be given a specific speed as a String or in milliseconds
5.2 Animation
$(document).ready(function() {
$('#vacations').on('click', '.vacation', function() {
$(this).toggleClass('highlighted');
if($(this).hasClass('highlighted')) {
} else {
}
});
});
Moving Back Down
ul
DOM representation
DOCUMENT
li .vacation
div #vacations
p .price
application.js
And with this we now have specific speeds for our animation
5.2 Animation
$(this).animate({'top': '-10px'}, 'fast');
$(this).animate({'top': '0px'}, 'fast');
Our jQuery animation is now using a ‘fast’ speed
The Next Step with CSS Animations
ul
DOM representation
DOCUMENT
li .vacation
div #vacations
p .price
application.js
if($(this).hasClass('highlighted')) {
$(this).animate({'top': '-10px'}, 'fast');
} else {
$(this).animate({'top': '0px'}, 'fast');
}
5.2 Animation
Isn’t this still styling? Shouldn’t it be inside of a stylesheet?
$(document).ready(function() {
$('#vacations').on('click', '.vacation', function() {
$(this).toggleClass('highlighted');
});
});
Animation Duration
application.js
5.2 Animation
transition: top 0.2s;
}
.highlighted {
top: -10px;
}
Will only work with browsers that implement CSS transitions
.vacation {
application.css
});
});
$(document).ready(function() {
$('#vacations').on('click', '.vacation', function() {
$(this).toggleClass('highlighted');
ul
DOM representation
DOCUMENT
li .vacation
div #vacations
p .price
Working with Modern Browsers
5.2 Animation
application.css
-moz-transition: top 0.2s;
-o-transition: top 0.2s;
-webkit-transition: top 0.2s;
Unlike jQuery, with CSS we have
to account for specific browsers
.vacation {
application.js
$(document).ready(function() {
$('#vacations').on('click', '.vacation', function() {
$(this).toggleClass('highlighted');
});
});
ul
DOM representation
DOCUMENT
li .vacation
div #vacations
p .price
transition: top 0.2s;
}
.highlighted {
top: -10px;
}
CSS Animations are a huge topic, but worth looking into

More Related Content

What's hot

JavaScript: Ajax & DOM Manipulation
JavaScript: Ajax & DOM ManipulationJavaScript: Ajax & DOM Manipulation
JavaScript: Ajax & DOM Manipulation
borkweb
 
Write Less Do More
Write Less Do MoreWrite Less Do More
Write Less Do More
Remy Sharp
 
Javascript: Ajax & DOM Manipulation v1.2
Javascript: Ajax & DOM Manipulation v1.2Javascript: Ajax & DOM Manipulation v1.2
Javascript: Ajax & DOM Manipulation v1.2
borkweb
 
Jquery tutorial-beginners
Jquery tutorial-beginnersJquery tutorial-beginners
Jquery tutorial-beginners
Isfand yar Khan
 
Advanced java script essentials v1
Advanced java script essentials v1Advanced java script essentials v1
Advanced java script essentials v1
ASHUTOSHPATKAR1
 
JavaScript DOM & event
JavaScript DOM & eventJavaScript DOM & event
JavaScript DOM & eventBorey Lim
 
jQuery from the very beginning
jQuery from the very beginningjQuery from the very beginning
jQuery from the very beginning
Anis Ahmad
 
JQuery introduction
JQuery introductionJQuery introduction
JQuery introduction
NexThoughts Technologies
 
Introduction to jQuery
Introduction to jQueryIntroduction to jQuery
Introduction to jQuery
Zeeshan Khan
 
D3.js and SVG
D3.js and SVGD3.js and SVG
D3.js and SVG
Karol Depka Pradzinski
 
jQuery Fundamentals
jQuery FundamentalsjQuery Fundamentals
jQuery Fundamentals
Gil Fink
 
Chrome DevTools Introduction 2020 Web Developers Guide
Chrome DevTools Introduction 2020 Web Developers GuideChrome DevTools Introduction 2020 Web Developers Guide
Chrome DevTools Introduction 2020 Web Developers Guide
Laurence Svekis ✔
 
jQuery
jQueryjQuery
jQuery
Jay Poojara
 
Why and How to Use Virtual DOM
Why and How to Use Virtual DOMWhy and How to Use Virtual DOM
Why and How to Use Virtual DOM
Daiwei Lu
 
Eugene Andruszczenko: jQuery
Eugene Andruszczenko: jQueryEugene Andruszczenko: jQuery
Eugene Andruszczenko: jQuery
Refresh Events
 
KMUTNB - Internet Programming 4/7
KMUTNB - Internet Programming 4/7KMUTNB - Internet Programming 4/7
KMUTNB - Internet Programming 4/7
phuphax
 
Interacting with the DOM (JavaScript)
Interacting with the DOM (JavaScript)Interacting with the DOM (JavaScript)
Interacting with the DOM (JavaScript)
Florence Davis
 

What's hot (19)

JavaScript
JavaScriptJavaScript
JavaScript
 
JavaScript: Ajax & DOM Manipulation
JavaScript: Ajax & DOM ManipulationJavaScript: Ajax & DOM Manipulation
JavaScript: Ajax & DOM Manipulation
 
Javascript tutorial
Javascript tutorialJavascript tutorial
Javascript tutorial
 
Write Less Do More
Write Less Do MoreWrite Less Do More
Write Less Do More
 
Javascript: Ajax & DOM Manipulation v1.2
Javascript: Ajax & DOM Manipulation v1.2Javascript: Ajax & DOM Manipulation v1.2
Javascript: Ajax & DOM Manipulation v1.2
 
Jquery tutorial-beginners
Jquery tutorial-beginnersJquery tutorial-beginners
Jquery tutorial-beginners
 
Advanced java script essentials v1
Advanced java script essentials v1Advanced java script essentials v1
Advanced java script essentials v1
 
JavaScript DOM & event
JavaScript DOM & eventJavaScript DOM & event
JavaScript DOM & event
 
jQuery from the very beginning
jQuery from the very beginningjQuery from the very beginning
jQuery from the very beginning
 
JQuery introduction
JQuery introductionJQuery introduction
JQuery introduction
 
Introduction to jQuery
Introduction to jQueryIntroduction to jQuery
Introduction to jQuery
 
D3.js and SVG
D3.js and SVGD3.js and SVG
D3.js and SVG
 
jQuery Fundamentals
jQuery FundamentalsjQuery Fundamentals
jQuery Fundamentals
 
Chrome DevTools Introduction 2020 Web Developers Guide
Chrome DevTools Introduction 2020 Web Developers GuideChrome DevTools Introduction 2020 Web Developers Guide
Chrome DevTools Introduction 2020 Web Developers Guide
 
jQuery
jQueryjQuery
jQuery
 
Why and How to Use Virtual DOM
Why and How to Use Virtual DOMWhy and How to Use Virtual DOM
Why and How to Use Virtual DOM
 
Eugene Andruszczenko: jQuery
Eugene Andruszczenko: jQueryEugene Andruszczenko: jQuery
Eugene Andruszczenko: jQuery
 
KMUTNB - Internet Programming 4/7
KMUTNB - Internet Programming 4/7KMUTNB - Internet Programming 4/7
KMUTNB - Internet Programming 4/7
 
Interacting with the DOM (JavaScript)
Interacting with the DOM (JavaScript)Interacting with the DOM (JavaScript)
Interacting with the DOM (JavaScript)
 

Similar to Jquery Toturial

jQuery basics
jQuery basicsjQuery basics
jQuery basics
Stijn Van Minnebruggen
 
Web Development Introduction to jQuery
Web Development Introduction to jQueryWeb Development Introduction to jQuery
Web Development Introduction to jQuery
Laurence Svekis ✔
 
Introduction to jQuery
Introduction to jQueryIntroduction to jQuery
Introduction to jQuery
Collaboration Technologies
 
jQuery Intro
jQuery IntrojQuery Intro
jQuery Intro
Jason Noble
 
jQuery
jQueryjQuery
jQuery
Vishwa Mohan
 
Xml part 6
Xml part 6Xml part 6
Xml part 6
NOHA AW
 
Introduction to Javascript programming
Introduction to Javascript programmingIntroduction to Javascript programming
Introduction to Javascript programming
Fulvio Corno
 
jQuery
jQueryjQuery
J query
J queryJ query
jQuery Loves Developers - Oredev 2009
jQuery Loves Developers - Oredev 2009jQuery Loves Developers - Oredev 2009
jQuery Loves Developers - Oredev 2009
Remy Sharp
 
Introduction to jQuery
Introduction to jQueryIntroduction to jQuery
Introduction to jQuery
Nagaraju Sangam
 
Getting started with jQuery
Getting started with jQueryGetting started with jQuery
Getting started with jQuery
Gill Cleeren
 
JQuery_and_Ajax.pptx
JQuery_and_Ajax.pptxJQuery_and_Ajax.pptx
JQuery_and_Ajax.pptx
AditiPawale1
 
J Query(04 12 2008) Foiaz
J Query(04 12 2008) FoiazJ Query(04 12 2008) Foiaz
J Query(04 12 2008) Foiaztestingphase
 
Lesson 202 02 oct13-1800-ay
Lesson 202 02 oct13-1800-ayLesson 202 02 oct13-1800-ay
Lesson 202 02 oct13-1800-ayCodecademy Ren
 
Javascript libraries
Javascript librariesJavascript libraries
Javascript libraries
Dumindu Pahalawatta
 
Learning jQuery made exciting in an interactive session by one of our team me...
Learning jQuery made exciting in an interactive session by one of our team me...Learning jQuery made exciting in an interactive session by one of our team me...
Learning jQuery made exciting in an interactive session by one of our team me...
Thinqloud
 
jQuery - Web Engineering
jQuery - Web Engineering jQuery - Web Engineering
jQuery - Web Engineering
adeel990
 
Lotusphere 2012 Speedgeeking - jQuery & Domino, a RAD Combination
Lotusphere 2012 Speedgeeking - jQuery & Domino, a RAD CombinationLotusphere 2012 Speedgeeking - jQuery & Domino, a RAD Combination
Lotusphere 2012 Speedgeeking - jQuery & Domino, a RAD Combination
Sean Burgess
 

Similar to Jquery Toturial (20)

jQuery basics
jQuery basicsjQuery basics
jQuery basics
 
Web Development Introduction to jQuery
Web Development Introduction to jQueryWeb Development Introduction to jQuery
Web Development Introduction to jQuery
 
Introduction to jQuery
Introduction to jQueryIntroduction to jQuery
Introduction to jQuery
 
jQuery Intro
jQuery IntrojQuery Intro
jQuery Intro
 
jQuery
jQueryjQuery
jQuery
 
Xml part 6
Xml part 6Xml part 6
Xml part 6
 
Introduction to Javascript programming
Introduction to Javascript programmingIntroduction to Javascript programming
Introduction to Javascript programming
 
J Query
J QueryJ Query
J Query
 
jQuery
jQueryjQuery
jQuery
 
J query
J queryJ query
J query
 
jQuery Loves Developers - Oredev 2009
jQuery Loves Developers - Oredev 2009jQuery Loves Developers - Oredev 2009
jQuery Loves Developers - Oredev 2009
 
Introduction to jQuery
Introduction to jQueryIntroduction to jQuery
Introduction to jQuery
 
Getting started with jQuery
Getting started with jQueryGetting started with jQuery
Getting started with jQuery
 
JQuery_and_Ajax.pptx
JQuery_and_Ajax.pptxJQuery_and_Ajax.pptx
JQuery_and_Ajax.pptx
 
J Query(04 12 2008) Foiaz
J Query(04 12 2008) FoiazJ Query(04 12 2008) Foiaz
J Query(04 12 2008) Foiaz
 
Lesson 202 02 oct13-1800-ay
Lesson 202 02 oct13-1800-ayLesson 202 02 oct13-1800-ay
Lesson 202 02 oct13-1800-ay
 
Javascript libraries
Javascript librariesJavascript libraries
Javascript libraries
 
Learning jQuery made exciting in an interactive session by one of our team me...
Learning jQuery made exciting in an interactive session by one of our team me...Learning jQuery made exciting in an interactive session by one of our team me...
Learning jQuery made exciting in an interactive session by one of our team me...
 
jQuery - Web Engineering
jQuery - Web Engineering jQuery - Web Engineering
jQuery - Web Engineering
 
Lotusphere 2012 Speedgeeking - jQuery & Domino, a RAD Combination
Lotusphere 2012 Speedgeeking - jQuery & Domino, a RAD CombinationLotusphere 2012 Speedgeeking - jQuery & Domino, a RAD Combination
Lotusphere 2012 Speedgeeking - jQuery & Domino, a RAD Combination
 

Recently uploaded

Normal Labour/ Stages of Labour/ Mechanism of Labour
Normal Labour/ Stages of Labour/ Mechanism of LabourNormal Labour/ Stages of Labour/ Mechanism of Labour
Normal Labour/ Stages of Labour/ Mechanism of Labour
Wasim Ak
 
Synthetic Fiber Construction in lab .pptx
Synthetic Fiber Construction in lab .pptxSynthetic Fiber Construction in lab .pptx
Synthetic Fiber Construction in lab .pptx
Pavel ( NSTU)
 
The Diamond Necklace by Guy De Maupassant.pptx
The Diamond Necklace by Guy De Maupassant.pptxThe Diamond Necklace by Guy De Maupassant.pptx
The Diamond Necklace by Guy De Maupassant.pptx
DhatriParmar
 
Digital Artifact 2 - Investigating Pavilion Designs
Digital Artifact 2 - Investigating Pavilion DesignsDigital Artifact 2 - Investigating Pavilion Designs
Digital Artifact 2 - Investigating Pavilion Designs
chanes7
 
Francesca Gottschalk - How can education support child empowerment.pptx
Francesca Gottschalk - How can education support child empowerment.pptxFrancesca Gottschalk - How can education support child empowerment.pptx
Francesca Gottschalk - How can education support child empowerment.pptx
EduSkills OECD
 
Chapter 3 - Islamic Banking Products and Services.pptx
Chapter 3 - Islamic Banking Products and Services.pptxChapter 3 - Islamic Banking Products and Services.pptx
Chapter 3 - Islamic Banking Products and Services.pptx
Mohd Adib Abd Muin, Senior Lecturer at Universiti Utara Malaysia
 
special B.ed 2nd year old paper_20240531.pdf
special B.ed 2nd year old paper_20240531.pdfspecial B.ed 2nd year old paper_20240531.pdf
special B.ed 2nd year old paper_20240531.pdf
Special education needs
 
Lapbook sobre os Regimes Totalitários.pdf
Lapbook sobre os Regimes Totalitários.pdfLapbook sobre os Regimes Totalitários.pdf
Lapbook sobre os Regimes Totalitários.pdf
Jean Carlos Nunes Paixão
 
How to Make a Field invisible in Odoo 17
How to Make a Field invisible in Odoo 17How to Make a Field invisible in Odoo 17
How to Make a Field invisible in Odoo 17
Celine George
 
Acetabularia Information For Class 9 .docx
Acetabularia Information For Class 9  .docxAcetabularia Information For Class 9  .docx
Acetabularia Information For Class 9 .docx
vaibhavrinwa19
 
Natural birth techniques - Mrs.Akanksha Trivedi Rama University
Natural birth techniques - Mrs.Akanksha Trivedi Rama UniversityNatural birth techniques - Mrs.Akanksha Trivedi Rama University
Natural birth techniques - Mrs.Akanksha Trivedi Rama University
Akanksha trivedi rama nursing college kanpur.
 
Best Digital Marketing Institute In NOIDA
Best Digital Marketing Institute In NOIDABest Digital Marketing Institute In NOIDA
Best Digital Marketing Institute In NOIDA
deeptiverma2406
 
"Protectable subject matters, Protection in biotechnology, Protection of othe...
"Protectable subject matters, Protection in biotechnology, Protection of othe..."Protectable subject matters, Protection in biotechnology, Protection of othe...
"Protectable subject matters, Protection in biotechnology, Protection of othe...
SACHIN R KONDAGURI
 
Multithreading_in_C++ - std::thread, race condition
Multithreading_in_C++ - std::thread, race conditionMultithreading_in_C++ - std::thread, race condition
Multithreading_in_C++ - std::thread, race condition
Mohammed Sikander
 
Operation Blue Star - Saka Neela Tara
Operation Blue Star   -  Saka Neela TaraOperation Blue Star   -  Saka Neela Tara
Operation Blue Star - Saka Neela Tara
Balvir Singh
 
A Strategic Approach: GenAI in Education
A Strategic Approach: GenAI in EducationA Strategic Approach: GenAI in Education
A Strategic Approach: GenAI in Education
Peter Windle
 
Supporting (UKRI) OA monographs at Salford.pptx
Supporting (UKRI) OA monographs at Salford.pptxSupporting (UKRI) OA monographs at Salford.pptx
Supporting (UKRI) OA monographs at Salford.pptx
Jisc
 
Digital Artifact 1 - 10VCD Environments Unit
Digital Artifact 1 - 10VCD Environments UnitDigital Artifact 1 - 10VCD Environments Unit
Digital Artifact 1 - 10VCD Environments Unit
chanes7
 
Introduction to AI for Nonprofits with Tapp Network
Introduction to AI for Nonprofits with Tapp NetworkIntroduction to AI for Nonprofits with Tapp Network
Introduction to AI for Nonprofits with Tapp Network
TechSoup
 
Advantages and Disadvantages of CMS from an SEO Perspective
Advantages and Disadvantages of CMS from an SEO PerspectiveAdvantages and Disadvantages of CMS from an SEO Perspective
Advantages and Disadvantages of CMS from an SEO Perspective
Krisztián Száraz
 

Recently uploaded (20)

Normal Labour/ Stages of Labour/ Mechanism of Labour
Normal Labour/ Stages of Labour/ Mechanism of LabourNormal Labour/ Stages of Labour/ Mechanism of Labour
Normal Labour/ Stages of Labour/ Mechanism of Labour
 
Synthetic Fiber Construction in lab .pptx
Synthetic Fiber Construction in lab .pptxSynthetic Fiber Construction in lab .pptx
Synthetic Fiber Construction in lab .pptx
 
The Diamond Necklace by Guy De Maupassant.pptx
The Diamond Necklace by Guy De Maupassant.pptxThe Diamond Necklace by Guy De Maupassant.pptx
The Diamond Necklace by Guy De Maupassant.pptx
 
Digital Artifact 2 - Investigating Pavilion Designs
Digital Artifact 2 - Investigating Pavilion DesignsDigital Artifact 2 - Investigating Pavilion Designs
Digital Artifact 2 - Investigating Pavilion Designs
 
Francesca Gottschalk - How can education support child empowerment.pptx
Francesca Gottschalk - How can education support child empowerment.pptxFrancesca Gottschalk - How can education support child empowerment.pptx
Francesca Gottschalk - How can education support child empowerment.pptx
 
Chapter 3 - Islamic Banking Products and Services.pptx
Chapter 3 - Islamic Banking Products and Services.pptxChapter 3 - Islamic Banking Products and Services.pptx
Chapter 3 - Islamic Banking Products and Services.pptx
 
special B.ed 2nd year old paper_20240531.pdf
special B.ed 2nd year old paper_20240531.pdfspecial B.ed 2nd year old paper_20240531.pdf
special B.ed 2nd year old paper_20240531.pdf
 
Lapbook sobre os Regimes Totalitários.pdf
Lapbook sobre os Regimes Totalitários.pdfLapbook sobre os Regimes Totalitários.pdf
Lapbook sobre os Regimes Totalitários.pdf
 
How to Make a Field invisible in Odoo 17
How to Make a Field invisible in Odoo 17How to Make a Field invisible in Odoo 17
How to Make a Field invisible in Odoo 17
 
Acetabularia Information For Class 9 .docx
Acetabularia Information For Class 9  .docxAcetabularia Information For Class 9  .docx
Acetabularia Information For Class 9 .docx
 
Natural birth techniques - Mrs.Akanksha Trivedi Rama University
Natural birth techniques - Mrs.Akanksha Trivedi Rama UniversityNatural birth techniques - Mrs.Akanksha Trivedi Rama University
Natural birth techniques - Mrs.Akanksha Trivedi Rama University
 
Best Digital Marketing Institute In NOIDA
Best Digital Marketing Institute In NOIDABest Digital Marketing Institute In NOIDA
Best Digital Marketing Institute In NOIDA
 
"Protectable subject matters, Protection in biotechnology, Protection of othe...
"Protectable subject matters, Protection in biotechnology, Protection of othe..."Protectable subject matters, Protection in biotechnology, Protection of othe...
"Protectable subject matters, Protection in biotechnology, Protection of othe...
 
Multithreading_in_C++ - std::thread, race condition
Multithreading_in_C++ - std::thread, race conditionMultithreading_in_C++ - std::thread, race condition
Multithreading_in_C++ - std::thread, race condition
 
Operation Blue Star - Saka Neela Tara
Operation Blue Star   -  Saka Neela TaraOperation Blue Star   -  Saka Neela Tara
Operation Blue Star - Saka Neela Tara
 
A Strategic Approach: GenAI in Education
A Strategic Approach: GenAI in EducationA Strategic Approach: GenAI in Education
A Strategic Approach: GenAI in Education
 
Supporting (UKRI) OA monographs at Salford.pptx
Supporting (UKRI) OA monographs at Salford.pptxSupporting (UKRI) OA monographs at Salford.pptx
Supporting (UKRI) OA monographs at Salford.pptx
 
Digital Artifact 1 - 10VCD Environments Unit
Digital Artifact 1 - 10VCD Environments UnitDigital Artifact 1 - 10VCD Environments Unit
Digital Artifact 1 - 10VCD Environments Unit
 
Introduction to AI for Nonprofits with Tapp Network
Introduction to AI for Nonprofits with Tapp NetworkIntroduction to AI for Nonprofits with Tapp Network
Introduction to AI for Nonprofits with Tapp Network
 
Advantages and Disadvantages of CMS from an SEO Perspective
Advantages and Disadvantages of CMS from an SEO PerspectiveAdvantages and Disadvantages of CMS from an SEO Perspective
Advantages and Disadvantages of CMS from an SEO Perspective
 

Jquery Toturial

  • 1.
  • 2. points & badges How does this work? flight time video lessons challenges 3:00
  • 4. In order to learn jQuery you need to know: ☑ ☑ HTML CSS JavaScript content style behavior
  • 7. What you can do with jQuery 1.1 What is jQuery? reveal interface elements
  • 8. What you can do with jQuery 1.1 What is jQuery? change content based on user actions
  • 9. What you can do with jQuery 1.1 What is jQuery? toggle CSS classes to highlight an element
  • 10. talk animate listen change find jQuery makes it easy to: 1.1 What is jQuery? elements in an HTML document HTML content to what a user does and react accordingly content on the page over the network to fetch new content
  • 11. HTML document Changing content How can we modify the text of the <h1> element? 1.1 What is jQuery? <!DOCTYPE html> <html> <head> <title>jQuery Adventures</title> </head> <body> <h1>Where do you want to go?</h1> <p>Plan your next adventure.</p> </body> </html> find it change it
  • 12. HTML document Finding the proper HTML How can we search through our html? We need to understand how our browser organizes the HTML it receives. 1.1 What is jQuery? <!DOCTYPE html> <html> <head> <title>jQuery Adventures</title> </head> <body> <h1>Where do you want to go?</h1> <p>Plan your next adventure.</p> </body> </html> find it
  • 13. Document Object Model A tree-like structure created by browsers so we can quickly find HTML Elements using JavaScript. 1.1 What is jQuery? “DOM”
  • 14. Loading HTML into the DOM DOM browser 1.1 What is jQuery? HTML document 100%0% 50% <!DOCTYPE html> <html> <head> <title>jQuery Adventures</title> </head> <body> <h1>Where do you want to go?</h1> <p>Plan your next adventure.</p> </body> </html>
  • 15. html head body title h1 p jQuery Adven... element textnode types: The DOM DOCUMENT Where do... Plan your... Inside the DOM, HTML elements become “nodes” which have relationships with one another. What does that DOM structure look like? 1.1 What is jQuery? HTML document <!DOCTYPE html> <html> <head> <title>jQuery Adventures</title> </head> <body> <h1>Where do you want to go?</h1> <p>Plan your next adventure.</p> </body> </html>
  • 16. html head body title h1 p jQuery Adven... element textnode types: The DOM DOCUMENT Where do... Plan your... How do we search through the DOM? 1.1 What is jQuery? JavaScript JavaScript gives developers a language to interact with the DOM.
  • 17. JavaScript How do we find things using the DOM? 1.1 What is jQuery? HTML Web Server Requests a Webpage Sends the HTML HTML JavaScript + other files needed to load that page DOM Loads into Interacts with Web Browser
  • 18. DOM DOM DOM DOM DOMJavaScript each browser has a slightly different DOM interface Of course, there’s a catch 1.1 What is jQuery?
  • 19. DOM If our JavaScript uses jQuery to interact with the DOM then it will work on most modern browsers. DOM DOM DOM DOM jQuery to the rescue! 1.1 What is jQuery? JavaScript
  • 20. Basic jQuery usage this is the jQuery function 1.1 What is jQuery? jQuery(<code>); JavaScript
  • 21. How jQuery Accesses The DOM 1.1 What is jQuery? jQuery(document); The DOM But how can we search through the DOM? JavaScript
  • 22. h1 { font-size: 3em; } CSS selectors p { color: blue; } 1.1 What is jQuery? <!DOCTYPE html> <html> <head> <title>jQuery Adventures</title> </head> <body> <h1>Where do you want to go?</h1> <p>Plan your next adventure.</p> </body> </html> HTML document We need to use CSS selectors
  • 23. Using the jQuery function to find nodes jQuery("h1"); jQuery("p"); 1.1 What is jQuery? <!DOCTYPE html> <html> <head> <title>jQuery Adventures</title> </head> <body> <h1>Where do you want to go?</h1> <p>Plan your next adventure.</p> </body> </html> HTML document jQuery selectors $("h1"); $("p"); = short & sweet syntax
  • 24. Changing the content of an element <!DOCTYPE html> <html> <head> <title>jQuery Adventures</title> </head> <body> <h1>Where do you want to go?</h1> <p>Plan your next adventure.</p> </body> </html> HTML document 1.1 What is jQuery? How can we modify the text of the <h1> element? find it change it
  • 25. Selecting by HTML element name html head body title h1 p jQuery Adv... DOM representation of the document DOCUMENT Where do... Plan your... 1.1 What is jQuery? <!DOCTYPE html> <html> <head> <title>jQuery Adventures</title> </head> <body> <h1>Where do you want to go?</h1> <p>Plan your next adventure.</p> </body> </html> HTML document
  • 26. Selecting by HTML element name $("h1") html head body title h1h1 p jQuery Adv... DOM representation of the document DOCUMENT Where do... Plan your... 1.1 What is jQuery? ;
  • 27. "Where do you want to go" Fetching an element’s text 1.1 What is jQuery? html head body title h1 p jQuery Adv... DOM representation of the document DOCUMENT Plan your... Where do... text() is a method offered by jQuery ($("h1").text );
  • 28. Modifying an element’s text html head body title h1 p jQuery Adv... DOM representation of the document DOCUMENT Where to? Plan your... 1.1 What is jQuery? text() also allows to modify the text node $("h1").text( );"Where to?"
  • 29. DOM JavaScript may execute before the DOM loads HTML 1.1 What is jQuery? 100%0% 50% $("h1").text( );"Where to?" We need to make sure the DOM has finished loading the HTML content before we can reliably use jQuery. h1 wasn’t in the DOM yet!
  • 30. DOM “I’m ready!” Listen for “I’m ready” then run <code> The DOM ready event HTML 1.1 What is jQuery? 100%0% 50% How can we listen for this signal?
  • 31. DOM “I’m ready!” Listening for document ready 1.1 What is jQuery? jQuery(document).ready(function(){ }); Will only run this code once the DOM is “ready” <code>
  • 32. Our completed code 1.1 What is jQuery? jQuery(document).ready(function(){ }); $("h1").text("Where to?");
  • 34. Getting started <script src="jquery.min.js"></script> <script src="application.js"></script> 1.2 Using jQuery download jQuery load it in your HTML document 1 2 start using it3
  • 35. find them modify their text Changing multiple elements at once HTML document How do we change the text of every <li> in this page? <h1>Where do you want to go?</h1> <h2>Travel Destinations</h2> <p>Plan your next adventure.</p> <ul id="destinations"> <li>Rome</li> <li>Paris</li> <li class='promo'>Rio</li> </ul> 1.2 Using jQuery
  • 36. Load HTML into the DOM HTML document body h1 h2 Where do... Plan your... 1.2 Using jQuery <h1>Where do you want to go?</h1> <h2>Travel Destinations</h2> <p>Plan your next adventure.</p> <ul id="destinations"> <li>Rome</li> <li>Paris</li> <li class='promo'>Rio</li> </ul> ul Rome li Paris li Rio li
  • 37. Selecting multiple elements $("li") HTML document body h1 li li li h2 Where do... Plan your... 1.2 Using jQuery ul Rome li Paris li Rio li; <h1>Where do you want to go?</h1> <h2>Travel Destinations</h2> <p>Plan your next adventure.</p> <ul id="destinations"> <li>Rome</li> <li>Paris</li> <li class='promo'>Rio</li> </ul>
  • 38. Modifying each of their text nodes HTML document body h1 h2 Where do... Plan your... 1.2 Using jQuery ul li li li.text("Orlando");$("li") Rome Paris Rio <h1>Where do you want to go?</h1> <h2>Travel Destinations</h2> <p>Plan your next adventure.</p> <ul id="destinations"> <li>Rome</li> <li>Paris</li> <li class='promo'>Rio</li> </ul> Orlando Orlando Orlando
  • 39. We can find elements by ID or Class p { ... } #container { ... } .articles { ... } $("p"); $("#container"); $(".articles"); 1.2 Using jQuery CSS jQuery
  • 40. find it using the ID Changing multiple elements at once HTML document How do we specifically select the <ul> that has a “destinations” ID? <h1>Where do you want to go?</h1> <h2>Travel Destinations</h2> <p>Plan your next adventure.</p> <ul id="destinations"> <li>Rome</li> <li>Paris</li> <li class='promo'>Rio</li> </ul> 1.2 Using jQuery
  • 41. Selecting by unique ID $("#destinations"); HTML document body h1 h2 Where do... Plan your... 1.2 Using jQuery <h1>Where do you want to go?</h1> <h2>Travel Destinations</h2> <p>Plan your next adventure.</p> <ul id="destinations"> <li>Rome</li> <li>Paris</li> <li class='promo'>Rio</li> </ul> ul Rome li Paris li Rio li id="destinations" class="promo" ul
  • 42. find it using the class Changing multiple elements at once HTML document How can we select just the <li> that has a “promo” class attribute? <h1>Where do you want to go?</h1> <h2>Travel Destinations</h2> <p>Plan your next adventure.</p> <ul id="destinations"> <li>Rome</li> <li>Paris</li> <li class='promo'>Rio</li> </ul> 1.2 Using jQuery
  • 43. Selecting by Class Name $(".promo"); HTML document body h1 h2 Where do... Plan your... 1.2 Using jQuery <h1>Where do you want to go?</h1> <h2>Travel Destinations</h2> <p>Plan your next adventure.</p> <ul id="destinations"> <li>Rome</li> <li>Paris</li> <li class='promo'>Rio</li> </ul> ul Rome li Paris li Rio li class="promo" id="destinations" li
  • 46. 2.1 Searching the DOM Selecting descendants HTML document <h1>Where do you want to go?</h1> <h2>Travel Destinations</h2> <p>Plan your next adventure.</p> <ul id="destinations"> <li>Rome</li> <li>Paris</li> <li class='promo'>Rio</li> </ul> How do we find the <li> elements that are inside of the <ul> with a “destinations” ID? descendant selector
  • 47. li li li <h1>Where do you want to go?</h1> <h2>Travel Destinations</h2> <p>Plan your next adventure.</p> <ul id="destinations"> <li>Paris</li> <li>Rome</li> <li class='promo'>Rio</li> </ul> Using the descendant selector $("#destinations li"); HTML document body h1 h2 Where do... Plan your... ul Rome li Paris li Rio li the space matters 2.1 Searching the DOM parent descendant
  • 48. <li>Paris</li> <li>Rome</li> <li class='promo'>Rio</li> <h1>Where do you want to go?</h1> <h2>Travel Destinations</h2> <p>Plan your next adventure.</p> <ul id="destinations"> <li> <ul id="france"> </ul> </li> </ul> <h1>Where do you want to go?</h1> <h2>Travel Destinations</h2> <p>Plan your next adventure.</p> <ul id="destinations"> HTML document How do we find only the <li> elements that are children of the “destinations” <ul>? descendant selector? 2.1 Searching the DOM Selecting direct children HTML document
  • 49. ul li li Paris li li li li li Selecting direct children $("#destinations li"); HTML document body ul Rome Rio li 2.1 Searching the DOM ... we don’t want this <h1>Where do you want to go?</h1> <h2>Travel Destinations</h2> <p>Plan your next adventure.</p> <ul id="destinations"> <li>Rome</li> <li> <ul id="france"> <li>Paris</li> </ul> </li> <li class='promo'>Rio</li> </ul>
  • 50. How do we find only the <li> elements that are direct children of the “destinations” <ul> then? child selector Selecting only direct children HTML document <h1>Where do you want to go?</h1> <h2>Travel Destinations</h2> <p>Plan your next adventure.</p> <ul id="destinations"> <li>Rome</li> <li> <ul id="france"> <li>Paris</li> </ul> </li> <li class='promo'>Rio</li> </div> 2.1 Searching the DOM
  • 51. li li Paris ul li li li li body ul Rome Rio li ... Selecting only direct children $("#destinations > li"); HTML document the sign matters parent child not selected <h1>Where do you want to go?</h1> <h2>Travel Destinations</h2> <p>Plan your next adventure.</p> <ul id="destinations"> <li>Rome</li> <li> <ul id="france"> <li>Paris</li> </ul> </li> <li class='promo'>Rio</li> </ul>
  • 52. How do we find only elements with either a “promo” class or a “france” ID multiple selector Selecting multiple elements HTML document <h1>Where do you want to go?</h1> <h2>Travel Destinations</h2> <p>Plan your next adventure.</p> <ul id="destinations"> <li>Rome</li> <li> <ul id="france"> <li>Paris</li> </ul> </li> <li class='promo'>Rio</li> </ul> 2.1 Searching the DOM
  • 53. ul lili ul Selecting multiple elements $(".promo, #france"); HTML document <h1>Where do you want to go?</h1> <h2>Travel Destinations</h2> <p>Plan your next adventure.</p> <ul id="destinations"> <li>Rome</li> <li> <ul id="france"> <li>Paris</li> </ul> </li> <li class='promo'>Rio</li> </ul> the comma matters li li Paris li body ul Rome Rio ...
  • 54. li lili li body h1 h2 Where do... Plan your... ul Rome Paris li Rio $("#destinations li:first"); CSS-like pseudo classes filter $("#destinations li:last"); 2.1 Searching the DOM
  • 55. li li body h1 h2 Where do... Plan your... ul Rome Paris li Rio li CSS-like pseudo classes $("#destinations li:odd"); $("#destinations li:even"); #0 #1 #2 watch out, the index starts at 0 2.1 Searching the DOM li li
  • 57. 2.2 Traversing Walking the DOM by traversing it HTML document <h1>Where do you want to go?</h1> <h2>Travel Destinations</h2> <p>Plan your next adventure.</p> <ul id="destinations"> <li>Rome</li> <li>Paris</li> <li class='promo'>Rio</li> </ul> Can we find all the <li> elements that the “destinations” list contains without using a descendant selector? filter by traversing
  • 58. li li lili li li Filtering by traversing $("#destinations li"); $("#destinations").find("li"); It takes a bit more code, but it’s faster. body h1 h2 Where do... Plan your... ul Rome Paris Rio 2.2 Traversing selection traversal
  • 59. lili Filtering by traversing $("li:first"); $("li").first(); body h1 h2 Where do... Plan your... ul Rome Paris li Rio li 2.2 Traversing
  • 60. lili Filtering by traversing $("li:last"); $("li").last(); body h1 h2 Where do... Plan your... ul Rome li Paris li Rio 2.2 Traversing
  • 61. HTML document <h1>Where do you want to go?</h1> <h2>Travel Destinations</h2> <p>Plan your next adventure.</p> <ul id="destinations"> <li>Rome</li> <li>Paris</li> <li class='promo'>Rio</li> </ul> Walking the DOM Can we find the middle list item, knowing there is no filter to find it unlike :first or :last? traversing 2.2 Traversing
  • 62. lili $("li").first(); body h1 h2 Where do... Plan your... ul Rome Paris li Rio li Walking the DOM 2.2 Traversing
  • 63. lili $("li").first(); body h1 h2 Where do... Plan your... ul Rome li Paris Rio li $("li").first().next(); Walking the DOM li 2.2 Traversing
  • 64. lili $("li").first(); body h1 h2 Where do... Plan your... ul Rome li Paris Rio li $("li").first().next(); $("li").first().next().prev(); Walking the DOM li 2.2 Traversing
  • 65. HTML document <h1>Where do you want to go?</h1> <h2>Travel Destinations</h2> <p>Plan your next adventure.</p> <ul id="destinations"> <li>Rome</li> <li>Paris</li> <li class='promo'>Rio</li> </ul> Walking up the DOM If we started by selecting a child, can we figure out what element is its direct parent? traversing up 2.2 Traversing
  • 66. lili $("li").first(); body h1 h2 Where do... Plan your... ul Rome Paris li Rio li Walking up the DOM 2.2 Traversing
  • 67. ul $("li").first(); body h1 h2 Where do... Plan your... ul Rome li Paris li Rio li $("li").first().parent(); Walking up the DOM li 2.2 Traversing
  • 68. Walking down the DOM HTML document <h1>Where do you want to go?</h1> <h2>Travel Destinations</h2> <p>Plan your next adventure.</p> <ul id="destinations"> <li>Rome</li> <ul id="france"> <li>Paris</li> </ul> <li class='promo'>Rio</li> </ul> With a parent that has many children who in turn have their own children, how could we find only the first generation of children? traversing down 2.2 Traversing
  • 69. Walking the DOM up and down $("#destinations").children("li"); children(), unlike find(), only selects direct children ul li li Paris li li li li body ul Rome Rio li ... id="destinations" 2.2 Traversing
  • 73. remove a DOM node li DOM representation of the document DOCUMENT Hawaiian Vac... h2 Get Price button p $399.99 Appending to the DOM class="vacation" append a new DOM node1 2 3.1 Manipulating the DOM
  • 74. application.js Appending to the DOM DOCUMENT h2 Get Price button p $399.99 li var price = $('<p>From $399.99</p>'); var price = "From $399.99"; var price = "<p>From $399.99</p>"; Creates a node but doesn’t add it to the DOM Price node (not in the DOM yet) $(document).ready(function() { // create a <p> node with the price }); 3.1 Manipulating the DOM class="vacation" Hawaiian Vac...
  • 75. DOCUMENT h2 Get Price button li application.js .append(<element>) .after(<element>) .before(<element>) .prepend(<element>) Appending to the DOM ways to add this price node to the DOM var price = $('<p>From $399.99</p>'); $(document).ready(function() { }); Price node (not in the DOM yet) p $399.99 3.1 Manipulating the DOM class="vacation" Hawaiian Vac...
  • 76. DOCUMENT h2 Get Price button li Before application.js $('.vacation').before(price); $(document).ready(function() { var price = $('<p>From $399.99</p>'); }); 3.1 Manipulating the DOM class="vacation" Hawaiian Vac... p $399.99 Puts the price node before .vacation
  • 77. li DOCUMENT h2 Get Price button p $399.99 After application.js $('#vacation').before(price); Puts the price node after .vacation $(document).ready(function() { var price = $('<p>From $399.99</p>'); }); $('.vacation').after(price); 3.1 Manipulating the DOM class="vacation" Hawaiian Vac... button
  • 78. var price = $('<p>From $399.99</p>'); $('.vacation').prepend(price); application.js Adds the node to the top of .vacation $(document).ready(function() { }); Prepend li DOCUMENT p $399.99 h2 Get Price button 3.1 Manipulating the DOM class="vacation" Hawaiian Vac...
  • 79. application.js 3.1 Manipulating the DOM Prepend and Append Puts the price node at the bottom of .vacation $('.vacation').append(price); $(document).ready(function() { var price = $('<p>From $399.99</p>'); }); li DOCUMENT p $399.99 class="vacation" h2 Get Price button Hawaiian Vac...
  • 80. application.js $(document).ready(function() { 3.1 Manipulating the DOM Removing from the DOM Removes the <button> from the DOM $('button').remove(); var price = $('<p>From $399.99</p>'); $('.vacation').append(price); }); li DOCUMENT p $399.99 class="vacation" h2 Get Price button Hawaiian Vac...
  • 82. DOCUMENT h2 Get Price button li .appendTo(<element>) .insertAfter(<element>) .insertBefore(<element>) .prependTo(<element>) Appending to the DOM Price node (not in the DOM yet) p $399.99 3.1 Manipulating the DOM class="vacation" Hawaiian Vac... application.js $(document).ready(function() { var price = $('<p>From $399.99</p>'); $('.vacation').append(price); $('button').remove(); }); price.appendTo($('.vacation')); Appends in the same place
  • 84. $(document).ready(<event handler function>); Passing in a function function() { // executing the function runs the code // between the braces } The ready method takes an event handler function as argument We create a function with the function keyword And we pass this function as an argument to the ready method. 3.2 Acting on Interaction $(document).ready(function() { // this function runs when the DOM is ready });
  • 85. 3.2 Acting on Interaction
  • 86. application.js Watching for Click DOCUMENT Hawaiian Vacation h2 Get Price button li class="vacation" Target all buttons Watch for any clicks Run the code inside of this function 3.2 Acting on Interaction $('button').on('click', function() { // runs when any button is clicked }); $(document).ready(function() { // runs when the DOM is ready }); .on(<event>, <event handler>) jQuery Object Methods
  • 87. application.js Removing from the DOM DOCUMENT Hawaiian Vacation h2 Get Price button li runs when the DOM is ready runs when a button is clicked 3.2 Acting on Interaction $(document).ready(function() { $('button').on('click', function() { }); // run this function on click }); class="vacation"
  • 88. application.js Removing from the DOM 3.2 Acting on Interaction var price = $('<p>From $399.99</p>'); $('.vacation').append(price); $('button').remove(); $(document).ready(function() { $('button').on('click', function() { }); }); DOCUMENT Hawaiian Vacation h2 Get Price button p $399.99 li class="vacation"
  • 89. Now the price will be shown when we click the button
  • 91. What if there are multiple vacation packages?
  • 92. $(document).ready(function() { $('button').on('click', function() { var price = $('<p>From $399.99</p>'); $('.vacation').append(price); application.js The price will be appended to both .vacation elements 3.3 Refactor Using Traversing Working, but with Errors ul DOCUMENT li p class="vacation" li p class="vacation" div id="vacations" Every button will be removed $('button').remove(); }); }); button buttonbutton button
  • 93. $(this).remove(); An Introduction to $(this) application.js ul DOCUMENT li button p li button p div If clicked, the button will be ‘this’ this.remove(); Not a jQuery object, needs to be converted 3.3 Refactor Using Traversing $(document).ready(function() { $('button').on('click', function() { var price = $('<p>From $399.99</p>'); $('.vacation').append(price); $('button').remove(); }); }); id="vacations" class="vacation" class="vacation"
  • 94. application.js An Introduction to $(this) 3.3 Refactor Using Traversing ul DOCUMENT li button p li button p div Only removes whichever button was clicked $(document).ready(function() { $('button').on('click', function() { var price = $('<p>From $399.99</p>'); $('.vacation').append(price); }); }); $(this).remove(); class="vacation" class="vacation" id="vacations"
  • 95. The clicked button will now be removed
  • 96. application.js Adds the <p> node after the <button> Traversing from $(this) ul DOCUMENT Hawaiian Vac... li h2 Get Price button p $399.99 class="vacation" 3.3 Refactor Using Traversing $(this).after(price); $(document).ready(function() { $('button').on('click', function() { var price = $('<p>From $399.99</p>'); $(this).remove(); }); }); $('.vacation').append(price);
  • 97. application.js Traversing from $(this) 3.3 Refactor Using Traversing Add the price as a sibling after button ul DOCUMENT Hawaiian Vac... li h2 Get Price button $(document).ready(function() { $('button').on('click', function() { var price = $('<p>From $399.99</p>'); $(this).remove(); }); }); $(this).after(price); class="vacation" p $399.99
  • 98. application.js What if the button is moved? ul DOCUMENT Hawaiian Vac... li h2 Get Price button p $399.99 3.3 Refactor Using Traversing div If the button is moved, the price will be moved How do we keep the price as a child of <li>? $(document).ready(function() { $('button').on('click', function() { var price = $('<p>From $399.99</p>'); $(this).remove(); }); }); $(this).after(price); class="vacation"
  • 99. application.js Using .closest(<selector>) 3.3 Refactor Using Traversing ul DOCUMENT Hawaiian Vac... li h2 Get Price button div $(this).after(price); $(this).parents('.vacation').append(price); $(this).parent().parent().append(price); p $399.99 $(this).closest('.vacation').append(price); class="vacation"
  • 100. application.js $(document).ready(function() { $('button').on('click', function() { var price = $('<p>From $399.99</p>'); $(this).remove(); }); }); ul DOCUMENT Hawaiian Vac... li h2 Get Price button p $399.99 Our Finished Handler Adds the <p> node at the bottom of .vacation 3.3 Refactor Using Traversing $(this).closest('.vacation').append(price); class="vacation"
  • 101. The prices will be added at the right place
  • 103. How do we allow vacations to have different prices?
  • 104. <li class="vacation onsale" <h3>Hawaiian Vacation</h3> <button>Get Price</button> <ul class='comments'> <li>Amazing deal!</li> <li>Want to go!</li> </ul> </li> index.html $('.vacation').first().data('price'); All data attributes begin with ‘data-’ "399.99" Tackling the HTML data-price='399.99'> .data(<name>) jQuery Object Methods .data(<name>, <value>) 3.4 Traversing & Filtering
  • 105. var amount = $(this).closest('.vacation').data('price'); application.js Reads from the data-price attribute Joins two strings to create the price Refactoring ‘Get Price’ $(document).ready(function() { $('button').on('click', function() { var price = $('<p>From $399.99</p>'); $(this).closest('.vacation').append(price); $(this).remove(); }); }); var price = $('<p>From $'+amount+'</p>'); 3.4 Traversing & Filtering
  • 106. application.js Refactoring ‘Get Price’ $(document).ready(function() { $('button').on('click', function() { $(this).closest('.vacation').append(price); $(this).remove(); }); }); Each vacation can have its own price var amount = $(this).closest('.vacation').data('price'); var price = $('<p>From $'+amount+'</p>'); 3.4 Traversing & Filtering
  • 107. var amount = $(this).closest('.vacation').data('price'); $(this).closest('.vacation').append(price); application.js Reusing jQuery Objects $(document).ready(function() { $('button').on('click', function() { var vacation = $(this).closest('.vacation'); var amount = vacation.data('price'); vacation.append(price); var price = $('<p>From $'+amount+'</p>'); $(this).remove(); }); }); 3.4 Traversing & Filtering
  • 108. vacation.append(price); var amount = vacation.data('price'); application.js Reusing jQuery Objects var vacation = $(this).closest('.vacation'); $(document).ready(function() { $('button').on('click', function() { var price = $('<p>From $'+amount+'</p>'); $(this).remove(); }); }); We’ll only query the DOM once for this element 3.4 Traversing & Filtering
  • 109. Each vacation can have its dynamic own price now
  • 110. application.js $('.vacation').on('click', 'button', function() {}); If we add new buttons anywhere, they will trigger this click handler $('.vacation button').on('click', function() {}); On With a Selector Only target a ‘button’ if it’s inside a ‘.vacation’ $(document).ready(function() { $('button').on('click', function() { ... }); }); 3.4 Traversing & Filtering
  • 111. We’ll implement our new filters next
  • 112. <div id='filters'> ... <button class='onsale-filter'>On Sale Now</button> <button class='expiring-filter'>Expiring</button> ... </div> index.html We’ll highlight vacations with these traits Filtering HTML We’ll write 2 event handlers for our buttons 3.4 Traversing & Filtering
  • 113. application.js Filtering for Vacations On sale div DOCUMENT button class="onsale-filter" button class="expiring-filter" // find all vacations that are on-sale // add a class to these vacations }); $('#filters').on('click', '.onsale-filter', function() { id="filters" 3.4 Traversing & Filtering
  • 114. Filtering for Vacations On sale ul DOCUMENT li ul li li li class="vacation onsale" class="vacation" class="vacation" class="comments" $('.vacation.onsale') $('.vacation').filter('.onsale') Finds elements with a class of .vacation and .onsale application.js // find all vacations that are on-sale // add a class to these vacations }); $('#filters').on('click', '.onsale-filter', function() { lili 3.4 Traversing & Filtering
  • 115. Class Manipulation application.js Filtering for Vacations On sale $('.vacation').filter('.onsale').addClass('highlighted'); .addClass(<class>) .removeClass(<class>) $('#filters').on('click', '.onsale-filter', function() { $('.vacation').filter('.onsale') // add a class to these vacations }); ul DOCUMENT li ul li li li lili 3.4 Traversing & Filtering class="vacation onsale" class="vacation" class="vacation" class="comments"
  • 116. application.js Filtering for Vacations On sale Finds only the right vacations Adds a class of ‘highlighted’ The same can be done for our expiring filter $('#filters').on('click', '.onsale-filter', function() { $('.vacation').filter('.onsale').addClass('highlighted'); }); $('.vacation').filter('.expiring').addClass('highlighted'); }); $('#filters').on('click', '.expiring-filter', function() { 3.4 Traversing & Filtering
  • 117. How do we make sure not all vacations are highlighted?
  • 118. application.js Unhighlighting Vacations $('#filters').on('click', '.onsale-filter', function() { $('.vacation').filter('.onsale').addClass('highlighted'); }); $('.highlighted').removeClass('highlighted'); Remove the highlighted class before adding it back 3.4 Traversing & Filtering
  • 119. We clear the highlighted class on click, only highlighting the targeted vacations
  • 120. 4level
  • 122. 4.1 On DOM Load
  • 123. .ticket { display: none; } index.html Hide ticket on page load Adding Ticket Confirmation find the ticket show the ticket watch for click Clicking this button... ...will show the ticket <li class="confirmation"> ... <button>FLIGHT DETAILS</button> <ul class="ticket">...</ul> </li> 4.1 On DOM Load
  • 124. application.js $('.confirmation').on('click', 'button', function() { }); Using slideDown to Show Elements index.html jQuery Object Methods .slideDown() .slideUp() .slideToggle() $(this).closest('.confirmation').find('.ticket').slideDown(); <li class="confirmation"> ... <ul class="ticket">...</ul> </li> <button>FLIGHT DETAILS</button> 4.1 On DOM Load Searches up through ancestors Searches down through children
  • 125. Why doesn’t the button work?
  • 126. alert('Hello'); Alert and Length 4.1 On DOM Load $('li').length; 3 To query how many nodes are on a page.
  • 127. $('.confirmation').on('click', 'button', function() { $(this).closest('.confirmation').find('.ticket').slideDown(); }); application.js alert($('button').length); The alert dialog Debugging with Alert 4.1 On DOM Load
  • 128. application.js $(document).ready(function() { }); The button is found after the DOM has loaded We Forgot $(document).ready() already alert($('button').length); $('.confirmation').on('click', 'button', function() { $(this).closest('.confirmation').find('.ticket').slideDown(); }); 4.1 On DOM Load
  • 129. Now that the DOM has loaded, jQuery can find our button
  • 131. What if we also want to show the ticket when they hover over the <h3> tag?
  • 132. application.js $(document).ready(function() { $('.confirmation').on('click', 'button', function() { $(this).closest('.confirmation').find('.ticket').slideDown(); }); }); What event should we watch for? Deciding on an Event $('.confirmation').on('?', 'h3', function() { $(this).closest('.confirmation').find('.ticket').slideDown(); }); Fires when the mouse is first positioned over the element click Mouse Events dblclick focusin focusout mouseover mouseup mouseout mouseleave mousemove mouseentermousedown 4.2 Expanding on on()
  • 133. application.js $(document).ready(function() { $('.confirmation').on('click', 'button', function() { $(this).closest('.confirmation').find('.ticket').slideDown(); }); $('.confirmation').on( , 'h3', function() { $(this).closest('.confirmation').find('.ticket').slideDown(); }); }); Mouse Events Show the ticket when the mouse is positioned over the h3 'mouseenter' 4.2 Expanding on on()
  • 134. We have two ways of showing the ticket now
  • 135. application.js $(document).ready(function() { $('.confirmation').on('click', 'button', function() { $(this).closest('.confirmation').find('.ticket').slideDown(); }); $('.confirmation').on('mouseenter', 'h3', function() { $(this).closest('.confirmation').find('.ticket').slideDown(); }); }); Extract out and name our event handler Refactoring Handler Functions This code is duplicated, how can we refactor this? showTicket () {function $(this).closest('.confirmation').find('.ticket').slideDown(); } 4.2 Expanding on on()
  • 136. application.js $(document).ready(function() { $('.confirmation').on('click', 'button', showTicket); $('.confirmation').on('mouseenter', 'h3', showTicket); }); Don’t add () at the end - that would execute the function immediately Refactoring Handler Functions showTicket () {function $(this).closest('.confirmation').find('.ticket').slideDown(); } 4.2 Expanding on on()
  • 137. Now the exact same code is run for both events
  • 139. Changing this “Tickets” input field should recalculate the total
  • 140. <div class="vacation" data-price='399.99'> <h3>Hawaiian Vacation</h3> <p>$399.99 per ticket</p> <p> Tickets: <input type='number' class='quantity' value='1' /> </p> </div> <p>Total Price: $<span id='total'>399.99</span></p> index.html ...we’ll update the calculated price here When this updates... Trip Planner Page 4.3 Keyboard Events
  • 141. Keyboard Events Form Events $(document).ready(function() { $('.vacation').on('?', '.quantity', function() { }); }); application.js http://api.jquery.com/category/events/keyboard-events/ http://api.jquery.com/category/events/form-events/ Which event should we use? keydown keypress keyup blur change focus select submit Keyboard and Form Events 4.3 Keyboard Events
  • 142. $(document).ready(function() { $('.vacation').on('keyup', '.quantity', function() { }); }); application.js Writing our Event Handler DOCUMENT li .vacation span p input #total var price = $(this).closest('.vacation').data('price'); Returns price as a string Use + to convert the string to a number // Get the price for this vacation .quantity p '399.99' 399.99 // Get the quantity entered // Set the total to price * quantity 4.3 Keyboard Events var price = +$(this).closest('.vacation').data('price');
  • 143. application.js Getting the Quantity of Tickets DOCUMENT li .vacation span p input .quantity p #total jQuery Object Methods .val() .val(<new value>) Sets quantity to a number var quantity = this.val(); Errors - not a jQuery object var quantity = $(this).val(); Sets quantity to a string var price = +$(this).closest('.vacation').data('price'); $(document).ready(function() { $('.vacation').on('keyup', '.quantity', function() { }); }); // Get the quantity entered // Set the total to price * quantity var quantity = +$(this).val(); 2 '2'
  • 144. application.js Setting the Total Price DOCUMENT li .vacation span p input .quantity p #total You can pass a number or a string to the .text() method $('#total').text(price * quantity); 4.3 Keyboard Events $(document).ready(function() { $('.vacation').on('keyup', '.quantity', function() { }); }); // Set the total to price * quantity var price = +$(this).closest('.vacation').data('price'); var quantity = +$(this).val();
  • 145. application.js The Completed Event Handler DOCUMENT li .vacation span p input .quantity p #totalWhenever the quantity is changed, the total will be updated 4.3 Keyboard Events $(document).ready(function() { $('.vacation').on('keyup', '.quantity', function() { }); }); var price = +$(this).closest('.vacation').data('price'); var quantity = +$(this).val(); $('#total').text(price * quantity);
  • 148. Clicking Show Comments will cause them to fade in
  • 149. Clicking this link... Preparing for Flight ul DOCUMENT Show Comments li a li ul li ...will show the comments .vacation .expand .comments .comments { display: none; } application.css application.js We need to write the event handler // Find the comments ul // Show the comments ul $(document).ready(function() { $('.vacation').on('click', '.expand', function() { }); }); 4.4 Link Layover
  • 150. Preparing for Flight ul DOCUMENT Show Comments li a li ul li .vacation .expand .comments Find the .comments ul using traversing $(this).closest('.vacation').find('.comments') application.js // Find the comments ul // Show the comments ul $(document).ready(function() { $('.vacation').on('click', '.expand', function() { }); }); 4.4 Link Layover
  • 151. jQuery Object Methods Preparing for Flight .fadeToggle().fadeIn() .fadeOut() These are similar to the slide methods $(document).ready(function() { $('.vacation').on('click', '.expand', function() { $(this).closest('.vacation') .find('.comments') // Show the comments ul }); }); ul DOCUMENT Show Comments li a li ul li .vacation .expand .comments application.js 4.4 Link Layover
  • 152. $(document).ready(function() { $('.vacation').on('click', '.expand', function() { $(this).closest('.vacation') .find('.comments') }); }); ul DOCUMENT Show Comments li a li ul li fadeIn() .comments on first click, fadeOut() .comments on next click. Handling the Click .vacation .expand .comments 4.4 Link Layover application.js .fadeToggle();
  • 153. Why does the page jump to the top?
  • 154. <a href='#' class='expand'>Show Comments</a> index.html How the Browser Handles the Click ul DOCUMENT Show Comments li a li ul li .vacation .expand .comments The click event will “bubble up” to each parent node 4.4 Link Layover Follows the link! (goes to the top of the page)
  • 155. }); The Event Object Add the event parameter application.js DOM TREE ul DOCUMENT Show Comments li a li ul li .vacation .expand .comments $(document).ready(function() { $('.vacation').on('click', '.expand', function(event) { $(this).closest('.vacation') .find('.comments') .fadeToggle(); }); 4.4 Link Layover
  • 156. event.stopPropagation() DOM TREE ul DOCUMENT Show Comments li a li ul li .vacation .expand .comments The browser will still handle the click event but will prevent it from “bubbling up” to each parent node. $(document).ready(function() { $('.vacation').on('click', '.expand', function(event) { event.stopPropagation(); $(this).closest('.vacation') .find('.comments') .fadeToggle(); }); }); 4.4 Link Layover application.js
  • 157. $(document).ready(function() { $('.vacation').on('click', '.expand', function(event) { $(this).closest('.vacation') .find('.comments') .fadeToggle(); } ); }); The click event will “bubble up” but the browser won’t handle it event.preventDefault() DOM TREE ul DOCUMENT Show Comments li a li ul li .vacation .expand .comments event.preventDefault(); 4.4 Link Layover application.js
  • 158. We’re preventing the default action of the browser now.
  • 159. 5level
  • 161. HTML CSS JavaScript content style behavior Separation of Concerns 5.1 Taming CSS To style something based on user interaction, which would we use?
  • 162. 5.1 Taming CSS ul DOM representation DOCUMENT li .vacation div #vacations ...and allow people to click on the <li> element Changing our Style p .price Let’s make all .vacation elements clickable...
  • 163. 5.1 Taming CSS application.js Changing the Style $(this).css('background-color', '#252b30') .css('border-color', '1px solid #967'); $(this).css({'background-color': '#252b30', 'border-color': '1px solid #967'}); Passing in a JavaScript Object as an argument is a common jQuery pattern ul DOM representation DOCUMENT li .vacation div #vacations p jQuery Object Methods .css(<attr>, <value>) .css(<attr>) .css(<object>) .price $(this).css('background-color', '#252b30'); $(this).css('border-color', '1px solid #967'); }); }); $(document).ready(function() { $('#vacations').on('click', '.vacation', function() {
  • 164. 5.1 Taming CSS Showing the Price ul DOM representation DOCUMENT li .vacation div #vacations p application.js jQuery Object Methods .show() .hide() $(this).find('.price').css('display', 'block'); .price $(this).find('.price').show(); Same as CSS syntax, but easier to read and understand }); }); $(document).ready(function() { $('#vacations').on('click', '.vacation', function() { $(this).css({'background-color': '#252b30', 'border-color': '1px solid #967'});
  • 165. 5.1 Taming CSS Showing the Price ul DOM representation DOCUMENT li .vacation div #vacations p application.js .price Highlights the Vacation Package and shows the price }); }); $(document).ready(function() { $('#vacations').on('click', '.vacation', function() { $(this).find('.price').show(); $(this).css({'background-color': '#252b30', 'border-color': '1px solid #967'});
  • 166. Our .vacation elements are highlighted when we click on them
  • 167. 5.1 Taming CSS Moving Styles to External CSS ul DOM representation DOCUMENT li .vacation div #vacations p application.js }); }); .price Can we move these to a CSS stylesheet?application.css border-color: 1px solid #967; } .highlighted .price { display: block; } $(this).css({'background-color': '#563', 'border-color': '1px solid #967'}); $(this).find('.price').show(); $(document).ready(function() { $('#vacations').on('click', '.vacation', function() { #563; .highlighted { background-color: $(this).addClass('highlighted');
  • 168. 5.1 Taming CSS Moving Styles to External CSS application.js }); }); It’s now much easier to manipulate with external CSS styles $(document).ready(function() { $('#vacations').on('click', '.vacation', function() { ul DOM representation DOCUMENT li .vacation div #vacations p .price application.css border-color: 1px solid #967; } .highlighted .price { display: block; } #563; .highlighted { background-color: $(this).addClass('highlighted');
  • 169. 5.1 Taming CSS Moving Styles to External CSS ul DOM representation DOCUMENT li .vacation div #vacations p application.js $(document).ready(function() { $('#vacations').on('click', '.vacation', function() { $(this).addClass('highlighted'); }); }); .price We can only show price, but how would we hide price? $(this).toggleClass('highlighted'); jQuery Object Methods .toggleClass() .addClass(<class>) .removeClass(<class>) Adds the class if $(this) doesn’t have it, removes it if $(this) already has it
  • 170. Our refactored page still works, and will be much easier to maintain
  • 173. What can we do to add a bit more movement to this?
  • 174. Takes in a JavaScript object similar to the .css() method Adding Movement jQuery Object Methods .animate(<object>) ul DOM representation DOCUMENT li .vacation div #vacations p .price application.js $(this).css({'top': '-10px'}); The box will jump up 10 px $(this).animate({'top': '-10px'}); 5.2 Animation $(document).ready(function() { $('#vacations').on('click', '.vacation', function() { $(this).toggleClass('highlighted'); }); });
  • 175. Adding Movement ul DOM representation DOCUMENT li .vacation div #vacations p .price application.js Will adjust a CSS property pixel by pixel in order to animate it 5.2 Animation $(this).animate({'top': '-10px'}); $(document).ready(function() { $('#vacations').on('click', '.vacation', function() { $(this).toggleClass('highlighted'); }); });
  • 176. Our animation can slide up but not slide down
  • 177. Moving Back Down ul DOM representation DOCUMENT li .vacation div #vacations p .price application.js How do we set ‘top’ to ‘0px’ if a second click occurs? “If statements” allow your code to make decisions at runtime 5.2 Animation $(document).ready(function() { $('#vacations').on('click', '.vacation', function() { $(this).toggleClass('highlighted'); }); }); $(this).animate({'top': '-10px'}); } else { // animate the vacation up } // animate the vacation back down if(<vacation has the class highlighted>) {
  • 178. Moving Back Down ul DOM representation DOCUMENT li .vacation div #vacations p .price application.js jQuery Object Methods .hasClass(<class>) $(this).hasClass('highlighted') Returns true or false 5.2 Animation true ; $(document).ready(function() { $('#vacations').on('click', '.vacation', function() { $(this).toggleClass('highlighted'); }); }); $(this).animate({'top': '-10px'}); $(this).animate({'top': '0px'}); } else { } if(<vacation has the class highlighted>) {
  • 179. Moving Back Down application.js Our vacation package will move up and down 5.2 Animation ul DOM representation DOCUMENT li .vacation div #vacations p .price $(this).hasClass('highlighted') $(document).ready(function() { $('#vacations').on('click', '.vacation', function() { $(this).toggleClass('highlighted'); }); }); $(this).animate({'top': '-10px'}); $(this).animate({'top': '0px'}); } else { } if( ) {
  • 180. Could we speed this up a little? Our customers don’t have all day.
  • 181. Changing the Speed $(this).animate({'top': '-10px'}); $(this).animate({'top': '-10px'}, 400); We can optionally pass in the speed as a second argument to animate() $(this).animate({'top': '-10px'}, 'fast'); $(this).animate({'top': '-10px'}, 200); $(this).animate({'top': '-10px'}, 'slow'); $(this).animate({'top': '-10px'}, 600); Effects methods like animate(), slideToggle() and fadeToggle() can also be given a specific speed as a String or in milliseconds 5.2 Animation
  • 182. $(document).ready(function() { $('#vacations').on('click', '.vacation', function() { $(this).toggleClass('highlighted'); if($(this).hasClass('highlighted')) { } else { } }); }); Moving Back Down ul DOM representation DOCUMENT li .vacation div #vacations p .price application.js And with this we now have specific speeds for our animation 5.2 Animation $(this).animate({'top': '-10px'}, 'fast'); $(this).animate({'top': '0px'}, 'fast');
  • 183. Our jQuery animation is now using a ‘fast’ speed
  • 184. The Next Step with CSS Animations ul DOM representation DOCUMENT li .vacation div #vacations p .price application.js if($(this).hasClass('highlighted')) { $(this).animate({'top': '-10px'}, 'fast'); } else { $(this).animate({'top': '0px'}, 'fast'); } 5.2 Animation Isn’t this still styling? Shouldn’t it be inside of a stylesheet? $(document).ready(function() { $('#vacations').on('click', '.vacation', function() { $(this).toggleClass('highlighted'); }); });
  • 185. Animation Duration application.js 5.2 Animation transition: top 0.2s; } .highlighted { top: -10px; } Will only work with browsers that implement CSS transitions .vacation { application.css }); }); $(document).ready(function() { $('#vacations').on('click', '.vacation', function() { $(this).toggleClass('highlighted'); ul DOM representation DOCUMENT li .vacation div #vacations p .price
  • 186. Working with Modern Browsers 5.2 Animation application.css -moz-transition: top 0.2s; -o-transition: top 0.2s; -webkit-transition: top 0.2s; Unlike jQuery, with CSS we have to account for specific browsers .vacation { application.js $(document).ready(function() { $('#vacations').on('click', '.vacation', function() { $(this).toggleClass('highlighted'); }); }); ul DOM representation DOCUMENT li .vacation div #vacations p .price transition: top 0.2s; } .highlighted { top: -10px; }
  • 187. CSS Animations are a huge topic, but worth looking into