Advanced Techniques
Store data locally within users browser
Local Storage
This stores data with no expiration date. The data in local storage would persist even when the user’s browser is closed and reopened.
Session Storage
Similar to local storage, except that it stores data for one session only. Once the user’s browser is closed, that session would be lost and the persisted data will be deleted from the browser
Create storage items using key and value pairs
localStorage.setItem("key","value");
key: like a variable name
value: like value assigned to variable
localStorage.setItem("myname","Daniel Kelly");
localStorage.setItem("myScore","72");
localStorage.setItem("secretColor","rgb(123,45,200)");
Create storage items using key and value pairs
Try it: Ctrl + Shift + J
Retrieve stored items using key
var myvalue = localStorage.getItem("key");
var myname = localStorage.getItem("myname");
var myScore = localStorage.getItem("myScore");
var secretColor = localStorage.getItem("secretColor");
Retrieve stored items using key
Store data locally within users browser
localStorage.setItem()
var myVar = localStorage.getItem()
Remove certain items based on key
localStorage.removeItem("key");
localStorage.removeItem("myname");
<!DOCTYPE html>
<html>
<head>
<title>Simmple Storge Example</title>
<link rel="stylesheet" type="text/css" href="storage.css">
</head>
<body>
<div class="leftbox">
</div>
<div class="rightbox">
</div>
</body>
</html>
.leftbox
{
float: left;
width: 300px;
padding: 20px;
border: 2px red solid;
}
.rightbox
{
float: left;
width: 300px;
padding: 20px;
border: 2px green solid;
margin-left: 20px;
padding: 20px;
}
<!DOCTYPE html>
<html>
<head>
<title>Simmple Storge Example</title>
<link rel="stylesheet" type="text/css" href="storage.css">
</head>
<body>
<div class="leftbox">
<h4>Save Values:</h4>
<form>
<p>(key) One: <input type="text" id="saveone"></p>
<p>(value) Two: <input type="text" id="savetwo"></p>
<p><input type="button" value="save" id="buttonsave"></p>
</form>
</div>
<div class="rightbox">
</div>
</body>
</html>
.leftbox
{
float: left;
width: 300px;
padding: 20px;
border: 2px red solid;
}
.rightbox
{
float: left;
width: 300px;
padding: 20px;
border: 2px green solid;
margin-left: 20px;
}
<!DOCTYPE html>
<html>
<head>
<title>Simmple Storge Example</title>
<link rel="stylesheet" type="text/css" href="storage.css">
</head>
<body>
<div class="leftbox">
<h4>Save Values:</h4>
<form>
<p>(key) One: <input type="text" id="saveone"></p>
<p>(value) Two: <input type="text" id="savetwo"></p>
<p><input type="button" value="save" id="buttonsave"></p>
</form>
</div>
<div class="rightbox">
<h4>Load Values:</h4>
<form>
<p>(key) One: <input type="text" id="loadone"></p>
<p><input type="button" value="Load" id="buttonload"></p>
</form>
<h6>Result:</h6>
<h2 id="result"></h2>
</div>
</body>
</html>
.leftbox
{
float: left;
width: 300px;
padding: 20px;
border: 2px red solid;
}
.rightbox
{
float: left;
width: 300px;
padding: 20px;
border: 2px green solid;
margin-left: 20px;
}
<!DOCTYPE html>
<html>
<head>
<title>Simmple Storge Example</title>
<link rel="stylesheet" type="text/css" href="storage.css">
</head>
<body>
<div class="leftbox">
<h4>Save Values:</h4>
<form>
<p>(key) One: <input type="text" id="saveone"></p>
<p>(value) Two: <input type="text" id="savetwo"></p>
<p><input type="button" value="save" id="buttonsave"></p>
</form>
</div>
<div class="rightbox">
<h4>Load Values:</h4>
<form>
<p>(key) One: <input type="text" id="loadone"></p>
<p><input type="button" value="Load" id="buttonload"></p>
</form>
<h6>Result:</h6>
<h2 id="result"></h2>
</div>
<script type="text/javascript" src="storage.js"></script>
</body>
</html>
//js will go here
create storage.js
<!DOCTYPE html>
<html>
<head>
<title>Simmple Storge Example</title>
<link rel="stylesheet" type="text/css" href="storage.css">
</head>
<body>
<div class="leftbox">
<h4>Save Values:</h4>
<form>
<p>(key) One: <input type="text" id="saveone"></p>
<p>(value) Two: <input type="text" id="savetwo"></p>
<p><input type="button" value="save" id="buttonsave"></p>
</form>
</div>
<div class="rightbox">
<h4>Load Values:</h4>
<form>
<p>(key) One: <input type="text" id="loadone"></p>
<p><input type="button" value="Load" id="buttonload"></p>
</form>
<h6>Result:</h6>
<h2 id="result"></h2>
</div>
<script type="text/javascript" src="storage.js"></script>
</body>
</html>
var saveButton = document.querySelector("#buttonsave");
saveButton.addEventListener("click",save);
function save()
{
}
set up click listener
<!DOCTYPE html>
<html>
<head>
<title>Simmple Storge Example</title>
<link rel="stylesheet" type="text/css" href="storage.css">
</head>
<body>
<div class="leftbox">
<h4>Save Values:</h4>
<form>
<p>(key) One: <input type="text" id="saveone"></p>
<p>(value) Two: <input type="text" id="savetwo"></p>
<p><input type="button" value="save" id="buttonsave"></p>
</form>
</div>
<div class="rightbox">
<h4>Load Values:</h4>
<form>
<p>(key) One: <input type="text" id="loadone"></p>
<p><input type="button" value="Load" id="buttonload"></p>
</form>
<h6>Result:</h6>
<h2 id="result"></h2>
</div>
<script type="text/javascript" src="storage.js"></script>
</body>
</html>
var saveButton = document.querySelector("#buttonsave");
saveButton.addEventListener("click",save);
function save()
{
var input_one = document.querySelector("#saveone");
var input_two = document.querySelector("#savetwo");
}
get inputs
<!DOCTYPE html>
<html>
<head>
<title>Simmple Storge Example</title>
<link rel="stylesheet" type="text/css" href="storage.css">
</head>
<body>
<div class="leftbox">
<h4>Save Values:</h4>
<form>
<p>(key) One: <input type="text" id="saveone"></p>
<p>(value) Two: <input type="text" id="savetwo"></p>
<p><input type="button" value="save" id="buttonsave"></p>
</form>
</div>
<div class="rightbox">
<h4>Load Values:</h4>
<form>
<p>(key) One: <input type="text" id="loadone"></p>
<p><input type="button" value="Load" id="buttonload"></p>
</form>
<h6>Result:</h6>
<h2 id="result"></h2>
</div>
<script type="text/javascript" src="storage.js"></script>
</body>
</html>
//...
function save()
{
var input_one = document.querySelector("#saveone");
var input_two = document.querySelector("#savetwo");
var input_one_value = input_one.value;
var input_two_value = input_two.value;
}
get values from inputs
<!DOCTYPE html>
<html>
<head>
<title>Simmple Storge Example</title>
<link rel="stylesheet" type="text/css" href="storage.css">
</head>
<body>
<div class="leftbox">
<h4>Save Values:</h4>
<form>
<p>(key) One: <input type="text" id="saveone"></p>
<p>(value) Two: <input type="text" id="savetwo"></p>
<p><input type="button" value="save" id="buttonsave"></p>
</form>
</div>
<div class="rightbox">
<h4>Load Values:</h4>
<form>
<p>(key) One: <input type="text" id="loadone"></p>
<p><input type="button" value="Load" id="buttonload"></p>
</form>
<h6>Result:</h6>
<h2 id="result"></h2>
</div>
<script type="text/javascript" src="storage.js"></script>
</body>
</html>
//...
function save()
{
var input_one = document.querySelector("#saveone");
var input_two = document.querySelector("#savetwo");
var input_one_value = input_one.value;
var input_two_value = input_two.value;
localStorage.setItem(input_one_value,input_two_value);
}
store key value pair
<!DOCTYPE html>
<html>
<head>
<title>Simmple Storge Example</title>
<link rel="stylesheet" type="text/css" href="storage.css">
</head>
<body>
<div class="leftbox">
<h4>Save Values:</h4>
<form>
<p>(key) One: <input type="text" id="saveone"></p>
<p>(value) Two: <input type="text" id="savetwo"></p>
<p><input type="button" value="save" id="buttonsave"></p>
</form>
</div>
<div class="rightbox">
<h4>Load Values:</h4>
<form>
<p>(key) One: <input type="text" id="loadone"></p>
<p><input type="button" value="Load" id="buttonload"></p>
</form>
<h6>Result:</h6>
<h2 id="result"></h2>
</div>
<script type="text/javascript" src="storage.js"></script>
</body>
</html>
//...
var loadButton = document.querySelector("#buttonload");
loadButton.addEventListener("click",load);
function load()
{
}
lets try to load the values from storage now
Add a load button event listener
<!DOCTYPE html>
<html>
<head>
<title>Simmple Storge Example</title>
<link rel="stylesheet" type="text/css" href="storage.css">
</head>
<body>
<div class="leftbox">
<h4>Save Values:</h4>
<form>
<p>(key) One: <input type="text" id="saveone"></p>
<p>(value) Two: <input type="text" id="savetwo"></p>
<p><input type="button" value="save" id="buttonsave"></p>
</form>
</div>
<div class="rightbox">
<h4>Load Values:</h4>
<form>
<p>(key) One: <input type="text" id="loadone"></p>
<p><input type="button" value="Load" id="buttonload"></p>
</form>
<h6>Result:</h6>
<h2 id="result"></h2>
</div>
<script type="text/javascript" src="storage.js"></script>
</body>
</html>
//...
var loadButton = document.querySelector("#buttonload");
loadButton.addEventListener("click",load);
function load()
{
var input_one = document.querySelector("#loadone");
var input_one_value = input_one.value;
}
lets try to load the values from storage now
Get value store in load text box
<!DOCTYPE html>
<html>
<head>
<title>Simmple Storge Example</title>
<link rel="stylesheet" type="text/css" href="storage.css">
</head>
<body>
<div class="leftbox">
<h4>Save Values:</h4>
<form>
<p>(key) One: <input type="text" id="saveone"></p>
<p>(value) Two: <input type="text" id="savetwo"></p>
<p><input type="button" value="save" id="buttonsave"></p>
</form>
</div>
<div class="rightbox">
<h4>Load Values:</h4>
<form>
<p>(key) One: <input type="text" id="loadone"></p>
<p><input type="button" value="Load" id="buttonload"></p>
</form>
<h6>Result:</h6>
<h2 id="result"></h2>
</div>
<script type="text/javascript" src="storage.js"></script>
</body>
</html>
//...
var loadButton = document.querySelector("#buttonload");
loadButton.addEventListener("click",load);
function load()
{
var input_one = document.querySelector("#loadone");
var input_one_value = input_one.value;
var storedValue = localStorage.getItem(input_one_value);
console.log(storedValue);
}
lets try to load the values from storage now
Get stored value that corresponds with key entered in textbox
<!DOCTYPE html>
<html>
<head>
<title>Simmple Storge Example</title>
<link rel="stylesheet" type="text/css" href="storage.css">
</head>
<body>
<div class="leftbox">
<h4>Save Values:</h4>
<form>
<p>(key) One: <input type="text" id="saveone"></p>
<p>(value) Two: <input type="text" id="savetwo"></p>
<p><input type="button" value="save" id="buttonsave"></p>
</form>
</div>
<div class="rightbox">
<h4>Load Values:</h4>
<form>
<p>(key) One: <input type="text" id="loadone"></p>
<p><input type="button" value="Load" id="buttonload"></p>
</form>
<h6>Result:</h6>
<h2 id="result"></h2>
</div>
<script type="text/javascript" src="storage.js"></script>
</body>
</html>
//...
var loadButton = document.querySelector("#buttonload");
loadButton.addEventListener("click",load);
function load()
{
var input_one = document.querySelector("#loadone");
var input_one_value = input_one.value;
var storedValue = localStorage.getItem(input_one_value);
var result_h2 = document.querySelector("#result");
result_h2.textContent = storedValue;
}
lets try to load the values from storage now
Display stored value in the h2 element
<!DOCTYPE html>
<html>
<head>
<title>Simmple Storge Example</title>
<link rel="stylesheet" type="text/css" href="storage.css">
</head>
<body>
<div class="leftbox">
<h4>Save Values:</h4>
<form>
<p>(key) One: <input type="text" id="saveone"></p>
<p>(value) Two: <input type="text" id="savetwo"></p>
<p><input type="button" value="save" id="buttonsave"></p>
</form>
</div>
<div class="rightbox">
<h4>Load Values:</h4>
<form>
<p>(key) One: <input type="text" id="loadone"></p>
<p><input type="button" value="Load" id="buttonload"></p>
</form>
<h6>Result:</h6>
<h2 id="result"></h2>
</div>
<script type="text/javascript" src="storage.js"></script>
</body>
</html>
//...
function save()
{
var input_one = document.querySelector("#saveone");
var input_two = document.querySelector("#savetwo");
var input_one_value = input_one.value;
var input_two_value = input_two.value;
input_one.value = "";
input_two.value = "";
localStorage.setItem(input_one_value,input_two_value);
}
//...
lets try to load the values from storage now
Clear the textbox content after saving
Week 11
document
<html>
<head>
<body>
<title>
<link>
Hotel Home
Page
<h1>
<div>
Rooms Available
<p>
<h3>
Rooms:
<em>
Note the following...
15
document node
element node
text node
document node
element node
text node
document node
element node
text node
element node
<html>
element node
<head>
element node
<body>
<html>
<head>
<title>DOM Tutorial</title>
</head>
<body>
<h1>DOM Lesson one</h1>
<p>Hello world!</p>
</body>
</html>
Relationship Types:
element node
<html>
element node
<head>
element node
<body>
<html>
<head>
<title>DOM Tutorial</title>
</head>
<body>
<h1>DOM Lesson one</h1>
<p>Hello world!</p>
</body>
</html>
Relationship Types:
Parent
Parent
element node
<html>
element node
<head>
element node
<body>
<html>
<head>
<title>DOM Tutorial</title>
</head>
<body>
<h1>DOM Lesson one</h1>
<p>Hello world!</p>
</body>
</html>
Relationship Types:
parentNode
parentNode
element node
<html>
element node
<head>
element node
<body>
<html>
<head>
<title>DOM Tutorial</title>
</head>
<body>
<h1>DOM Lesson one</h1>
<p>Hello world!</p>
</body>
</html>
Relationship Types:
Child
Child
element node
<html>
element node
<head>
element node
<body>
<html>
<head>
<title>DOM Tutorial</title>
</head>
<body>
<h1>DOM Lesson one</h1>
<p>Hello world!</p>
</body>
</html>
Relationship Types:
firstChild
lastChild
element node
<html>
element node
<head>
element node
<body>
<html>
<head>
<title>DOM Tutorial</title>
</head>
<body>
<h1>DOM Lesson one</h1>
<p>Hello world!</p>
</body>
</html>
Relationship Types:
Set of Children
element node
<html>
element node
<head>
element node
<body>
<html>
<head>
<title>DOM Tutorial</title>
</head>
<body>
<h1>DOM Lesson one</h1>
<p>Hello world!</p>
</body>
</html>
Relationship Types:
children
children[0]
children[1]
element node
<html>
element node
<head>
element node
<body>
<html>
<head>
<title>DOM Tutorial</title>
</head>
<body>
<h1>DOM Lesson one</h1>
<p>Hello world!</p>
</body>
</html>
Relationship Types:
Sibling
Sibling
element node
<html>
element node
<head>
element node
<body>
<html>
<head>
<title>DOM Tutorial</title>
</head>
<body>
<h1>DOM Lesson one</h1>
<p>Hello world!</p>
</body>
</html>
Relationship Types:
nextSibling
previousSibling
<html>
<head>
<title>DOM Tutorial</title>
</head>
<body>
<h1>DOM Lesson one</h1>
<p>Hello world!</p>
</body>
</html>
element node
<body>
element node
<h1>
element node
<p>
Element nodes do not contain text
"DOM Lesson one"
?
"Hello world!"
?
<html>
<head>
<title>DOM Tutorial</title>
</head>
<body>
<h1>DOM Lesson one</h1>
<p>Hello world!</p>
</body>
</html>
element node
<body>
element node
<h1>
element node
<p>
Text stored in additional text node
text node
"DOM Lesson One"
text node
"Hello world!"
var newH1Element = document.createElement("h1");
var newH3Element = document.createElement("h3");
var newDivElement = document.createElement("div");
var newPElement = document.createElement("p");
1.2. Create text node
var newH1Element = document.createElement("h1");
1.1 Create basic element
newH1Element.appendChild(textN);
1.3. Append text node to newly created element
var textN = document.createTextNode("My Heading");
element node
<h1>
text node
"My Heading"
var newH1Element = document.createElement("h1");
var textN = document.createTextNode("My Heading");
newH1Element.appendChild(textN);
newH1Element
textN
var element = document.querySelector("#div1");
2. Append newly created element to an existing element
2.1 Grab Existing Element
2.2 Append new element to grabbed element
element.appendChild(newH1Element);
element node
<h1>
text node
"My Heading"
var element = document.querySelector("#div1");
element.appendChild(newH1Element);
newH1Element
<html>
<head>
<title>DOM Tutorial</title>
</head>
<body>
<div id="div1">
<h1>Already Existed</h1>
</div>
</body>
</html>
element node
<div>
text node
"Already Existed"
element node
<h1>
element
<html>
<head>
<title>DOM Tutorial</title>
</head>
<body>
<div id="div1">
<h1>Already Existed</h1>
<h1>My Heading</h1>
</div>
</body>
</html>
<div id="div1">
<p id="p1">This is a paragraph.</p>
<p id="p2">This is another paragraph.</p>
</div>
//1.
var parent = document.getElementById("div1");
//2.
var child = document.getElementById("p1");
//3.
parent.removeChild(child);
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Simple JavaScript Todo</title>
<link rel="stylesheet" type="text/css" href="todo2.css">
</head>
<body>
<div class="wrapper">
<h1>Todo App:</h1>
<div id="inputarea">
<input type="text" id="text" placeholder="Add stuff..">
<button id="add">Add</button>
<button id="removeAll">Remove all</button>
</div>
<div class="border">
<ul id="list"></ul>
</div>
</div>
<script type="text/javascript" src="todo2.js"></script>
</body>
</html>
Sample ToDo List App:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Simple JavaScript Todo</title>
<link rel="stylesheet" type="text/css" href="todo2.css">
</head>
<body>
<div class="wrapper">
<h1>Todo App:</h1>
<div id="inputarea">
<input type="text" id="text" placeholder="Add stuff..">
<button id="add">Add</button>
<button id="removeAll">Remove all</button>
</div>
<div class="border">
<ul id="list"></ul>
</div>
</div>
<script type="text/javascript" src="todo2.js"></script>
</body>
</html>
html, body {
padding: 0;
margin: 0;
width: 100%;
background-color: #9BC1BC;
font-family: 'Roboto', sans-serif;
}
Sample ToDo List App:
Add basic styling: background, font, width and height
<!DOCTYPE html>
<head>
<title>Simple JavaScript Todo</title>
<link rel="stylesheet" type="text/css" href="todo.css">
</head>
<body>
<div class="wrapper">
<div class="border">
<h1>Todo App:<h1>
<input type="text" id="text" placeholder="Add stuff..">
<button id="add">Add</button>
<button id="removeAll">Remove all</button>
<ul id="list"></ul>
</div>
</div>
<script type="text/javascript" src="todo.js"></script>
</body>
</html>
.wrapper {
max-width: 900px;
min-height: 500px;
margin: 0 auto;
height: 100%;
background-color: #EAE1DF;
border-bottom-left-radius: 15px;
border-bottom-right-radius: 15px;
}
Sample ToDo List App:
Style the outer most div: set max-width, center it and add background color
.border {
margin-left: 25px;
margin-right: 25px;
padding-bottom: 25px;
}
Sample ToDo List App:
Style the inner div: add some margin
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Simple JavaScript Todo</title>
<link rel="stylesheet" type="text/css" href="todo2.css">
</head>
<body>
<div class="wrapper">
<h1>Todo App:</h1>
<div id="inputarea">
<input type="text" id="text" placeholder="Add stuff..">
<button id="add">Add</button>
<button id="removeAll">Remove all</button>
</div>
<div class="border">
<ul id="list"></ul>
</div>
</div>
<script type="text/javascript" src="todo2.js"></script>
</body>
</html>
#inputarea
{
padding: 10px 20px 10px 20px;
background-color: #14213D;
border-bottom: 8px solid #FCA311;
}
Sample ToDo List App:
Style the inputarea div: add some color and border color
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Simple JavaScript Todo</title>
<link rel="stylesheet" type="text/css" href="todo2.css">
</head>
<body>
<div class="wrapper">
<h1>Todo App:</h1>
<div id="inputarea">
<input type="text" id="text" placeholder="Add stuff..">
<button id="add">Add</button>
<button id="removeAll">Remove all</button>
</div>
<div class="border">
<ul id="list"></ul>
</div>
</div>
<script type="text/javascript" src="todo2.js"></script>
</body>
</html>
h1 {
text-align: center;
background-color: #FCA311;
margin: 0px;
padding-top: 20px;
padding-bottom: 20px;
text-transform: uppercase;
font-weight: 700;
color: #14213D;
}
Sample ToDo List App:
Style the h1: uppercase, font weight and color
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Simple JavaScript Todo</title>
<link rel="stylesheet" type="text/css" href="todo2.css">
</head>
<body>
<div class="wrapper">
<h1>Todo App:</h1>
<div id="inputarea">
<input type="text" id="text" placeholder="Add stuff..">
<button id="add">Add</button>
<button id="removeAll">Remove all</button>
</div>
<div class="border">
<ul id="list"></ul>
</div>
</div>
<script type="text/javascript" src="todo2.js"></script>
</body>
</html>
input {
padding: 10px;
color: #212121;
border: 1px solid #d2d2d2;
border-radius: 2px 2px 2px 2px;
}
Sample ToDo List App:
Style the textbox
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Simple JavaScript Todo</title>
<link rel="stylesheet" type="text/css" href="todo2.css">
</head>
<body>
<div class="wrapper">
<h1>Todo App:</h1>
<div id="inputarea">
<input type="text" id="text" placeholder="Add stuff..">
<button id="add">Add</button>
<button id="removeAll">Remove all</button>
</div>
<div class="border">
<ul id="list"></ul>
</div>
</div>
<script type="text/javascript" src="todo2.js"></script>
</body>
</html>
button {
padding: 10px;
border: 0 none;
border-radius: 2px 2px 2px 2px;
color: #FFFFFF;
cursor: pointer;
font-weight: 800;
text-transform: uppercase;
font-size: 12px;
}
Sample ToDo List App:
Define general button style
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Simple JavaScript Todo</title>
<link rel="stylesheet" type="text/css" href="todo2.css">
</head>
<body>
<div class="wrapper">
<h1>Todo App:</h1>
<div id="inputarea">
<input type="text" id="text" placeholder="Add stuff..">
<button id="add">Add</button>
<button id="removeAll">Remove all</button>
</div>
<div class="border">
<ul id="list"></ul>
</div>
</div>
<script type="text/javascript" src="todo2.js"></script>
</body>
</html>
button#add {
background-color: #46b98a;
}
button#add:hover {
background-color: #3fa67c;
}
button#removeAll {
background-color: #E0645C;
}
button#removeAll:hover {
background-color: #c95a52;
}
Sample ToDo List App:
Define specific colors for add and remove buttons
Define specific hover colors for add and remove buttons
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Simple JavaScript Todo</title>
<link rel="stylesheet" type="text/css" href="todo2.css">
</head>
<body>
<div class="wrapper">
<h1>Todo App:</h1>
<div id="inputarea">
<input type="text" id="text" placeholder="Add stuff..">
<button id="add">Add</button>
<button id="removeAll">Remove all</button>
</div>
<div class="border">
<ul id="list"></ul>
</div>
</div>
<script type="text/javascript" src="todo2.js"></script>
</body>
</html>
ul#list {
margin: 0;
padding: 20px 0 0 0;
}
Sample ToDo List App:
Style the ul: set padding and no margins
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Simple JavaScript Todo</title>
<link rel="stylesheet" type="text/css" href="todo2.css">
</head>
<body>
<div class="wrapper">
<h1>Todo App:</h1>
<div id="inputarea">
<input type="text" id="text" placeholder="Add stuff..">
<button id="add">Add</button>
<button id="removeAll">Remove all</button>
</div>
<div class="border">
<ul id="list"></ul>
</div>
</div>
<script type="text/javascript" src="todo2.js"></script>
</body>
</html>
var add = document.querySelector('#add');
add.addEventListener("click",addLi);
function addLi()
{
}
Sample ToDo List App:
Create click event listen for add button
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Simple JavaScript Todo</title>
<link rel="stylesheet" type="text/css" href="todo2.css">
</head>
<body>
<div class="wrapper">
<h1>Todo App:</h1>
<div id="inputarea">
<input type="text" id="text" placeholder="Add stuff..">
<button id="add">Add</button>
<button id="removeAll">Remove all</button>
</div>
<div class="border">
<ul id="list"></ul>
</div>
</div>
<script type="text/javascript" src="todo2.js"></script>
</body>
</html>
var add = document.querySelector('#add');
add.addEventListener("click",addLi);
function addLi()
{
//1. Get text from textbox and print console.log
}
Sample ToDo List App:
Create click event listen for add button
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Simple JavaScript Todo</title>
<link rel="stylesheet" type="text/css" href="todo2.css">
</head>
<body>
<div class="wrapper">
<h1>Todo App:</h1>
<div id="inputarea">
<input type="text" id="text" placeholder="Add stuff..">
<button id="add">Add</button>
<button id="removeAll">Remove all</button>
</div>
<div class="border">
<ul id="list"></ul>
</div>
</div>
<script type="text/javascript" src="todo2.js"></script>
</body>
</html>
var add = document.querySelector('#add');
add.addEventListener("click",addLi);
function addLi()
{
var inputText = document.getElementById('text').value;
}
Sample ToDo List App:
Grab the text box value
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Simple JavaScript Todo</title>
<link rel="stylesheet" type="text/css" href="todo2.css">
</head>
<body>
<div class="wrapper">
<h1>Todo App:</h1>
<div id="inputarea">
<input type="text" id="text" placeholder="Add stuff..">
<button id="add">Add</button>
<button id="removeAll">Remove all</button>
</div>
<div class="border">
<ul id="list"></ul>
</div>
</div>
<script type="text/javascript" src="todo2.js"></script>
</body>
</html>
var add = document.querySelector('#add');
add.addEventListener("click",addLi);
function addLi()
{
var inputText = document.getElementById('text').value;
var li = document.createElement('li');
var textNode = document.createTextNode(inputText + ' ');
}
Sample ToDo List App:
Create some new elements
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Simple JavaScript Todo</title>
<link rel="stylesheet" type="text/css" href="todo2.css">
</head>
<body>
<div class="wrapper">
<h1>Todo App:</h1>
<div id="inputarea">
<input type="text" id="text" placeholder="Add stuff..">
<button id="add">Add</button>
<button id="removeAll">Remove all</button>
</div>
<div class="border">
<ul id="list"></ul>
</div>
</div>
<script type="text/javascript" src="todo2.js"></script>
</body>
</html>
var add = document.querySelector('#add');
add.addEventListener("click",addLi);
function addLi()
{
var inputText = document.getElementById('text').value;
var li = document.createElement('li');
var textNode = document.createTextNode(inputText + ' ');
//append the text node to the li
}
Sample ToDo List App:
Create some new elements
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Simple JavaScript Todo</title>
<link rel="stylesheet" type="text/css" href="todo2.css">
</head>
<body>
<div class="wrapper">
<h1>Todo App:</h1>
<div id="inputarea">
<input type="text" id="text" placeholder="Add stuff..">
<button id="add">Add</button>
<button id="removeAll">Remove all</button>
</div>
<div class="border">
<ul id="list"></ul>
</div>
</div>
<script type="text/javascript" src="todo2.js"></script>
</body>
</html>
var add = document.querySelector('#add');
add.addEventListener("click",addLi);
function addLi()
{
var inputText = document.getElementById('text').value;
var li = document.createElement('li');
var textNode = document.createTextNode(inputText + ' ');
li.appendChild(textNode);
}
Sample ToDo List App:
Add the text to the li
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Simple JavaScript Todo</title>
<link rel="stylesheet" type="text/css" href="todo2.css">
</head>
<body>
<div class="wrapper">
<h1>Todo App:</h1>
<div id="inputarea">
<input type="text" id="text" placeholder="Add stuff..">
<button id="add">Add</button>
<button id="removeAll">Remove all</button>
</div>
<div class="border">
<ul id="list"></ul>
</div>
</div>
<script type="text/javascript" src="todo2.js"></script>
</body>
</html>
var add = document.querySelector('#add');
add.addEventListener("click",addLi);
function addLi()
{
var inputText = document.getElementById('text').value;
var li = document.createElement('li');
var textNode = document.createTextNode(inputText + ' ');
li.appendChild(textNode);
var ul = document.querySelector('#list');
//append the li to the ul
}
Sample ToDo List App:
Add the li to the ul
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Simple JavaScript Todo</title>
<link rel="stylesheet" type="text/css" href="todo2.css">
</head>
<body>
<div class="wrapper">
<h1>Todo App:</h1>
<div id="inputarea">
<input type="text" id="text" placeholder="Add stuff..">
<button id="add">Add</button>
<button id="removeAll">Remove all</button>
</div>
<div class="border">
<ul id="list"></ul>
</div>
</div>
<script type="text/javascript" src="todo2.js"></script>
</body>
</html>
var add = document.querySelector('#add');
add.addEventListener("click",addLi);
function addLi()
{
var inputText = document.getElementById('text').value;
var li = document.createElement('li');
var textNode = document.createTextNode(inputText + ' ');
li.appendChild(textNode);
var ul = document.querySelector('#list');
ul.appendChild(li);
}
Sample ToDo List App:
Add the li to the ul
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Simple JavaScript Todo</title>
<link rel="stylesheet" type="text/css" href="todo2.css">
</head>
<body>
<div class="wrapper">
<h1>Todo App:</h1>
<div id="inputarea">
<input type="text" id="text" placeholder="Add stuff..">
<button id="add">Add</button>
<button id="removeAll">Remove all</button>
</div>
<div class="border">
<ul id="list"></ul>
</div>
</div>
<script type="text/javascript" src="todo2.js"></script>
</body>
</html>
var add = document.querySelector('#add');
add.addEventListener("click",addLi);
function addLi()
{
var inputText = document.getElementById('text').value;
var li = document.createElement('li');
var textNode = document.createTextNode(inputText + ' ');
var removeButton = document.createElement('button');//<---add this
li.appendChild(textNode);
li.appendChild(removeButton);//<---add this
var ul = document.querySelector('#list');
ul.appendChild(li);
}
Sample ToDo List App:
Add a button the the li also
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Simple JavaScript Todo</title>
<link rel="stylesheet" type="text/css" href="todo2.css">
</head>
<body>
<div class="wrapper">
<h1>Todo App:</h1>
<div id="inputarea">
<input type="text" id="text" placeholder="Add stuff..">
<button id="add">Add</button>
<button id="removeAll">Remove all</button>
</div>
<div class="border">
<ul id="list"></ul>
</div>
</div>
<script type="text/javascript" src="todo2.js"></script>
</body>
</html>
var add = document.querySelector('#add');
add.addEventListener("click",addLi);
function addLi()
{
var inputText = document.getElementById('text').value;
var li = document.createElement('li');
var textNode = document.createTextNode(inputText + ' ');
var removeButton = document.createElement('button');
removeButton.classList.add('removeMe');//<---add this
li.appendChild(textNode);
li.appendChild(removeButton);
var ul = document.querySelector('#list');
ul.appendChild(li);
}
Sample ToDo List App:
Style the button by adding the "removeMe" class
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Simple JavaScript Todo</title>
<link rel="stylesheet" type="text/css" href="todo2.css">
</head>
<body>
<div class="wrapper">
<h1>Todo App:</h1>
<div id="inputarea">
<input type="text" id="text" placeholder="Add stuff..">
<button id="add">Add</button>
<button id="removeAll">Remove all</button>
</div>
<div class="border">
<ul id="list"></ul>
</div>
</div>
<script type="text/javascript" src="todo2.js"></script>
</body>
</html>
var add = document.querySelector('#add');
add.addEventListener("click",addLi);
function addLi()
{
var inputText = document.getElementById('text').value;
var li = document.createElement('li');
var textNode = document.createTextNode(inputText + ' ');
var removeButton = document.createElement('button');
removeButton.classList.add('removeMe');
var checkbox = document.createElement('input');//<---add this
checkbox.type = "checkbox";//<---add this
checkbox.id = "cb";//<---add this
li.appendChild(checkbox);//<---add this
li.appendChild(textNode);
li.appendChild(removeButton);
var ul = document.querySelector('#list');
ul.appendChild(li);
}
Sample ToDo List App:
Add a checkbox to the li also
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Simple JavaScript Todo</title>
<link rel="stylesheet" type="text/css" href="todo2.css">
</head>
<body>
<div class="wrapper">
<h1>Todo App:</h1>
<div id="inputarea">
<input type="text" id="text" placeholder="Add stuff..">
<button id="add">Add</button>
<button id="removeAll">Remove all</button>
</div>
<div class="border">
<ul id="list"></ul>
</div>
</div>
<script type="text/javascript" src="todo2.js"></script>
</body>
</html>
<li>
<input type="checkbox" id="id"></input>
Text from inputText textbox goes here
<button class="removeMe"></button>
</li>
var add = document.querySelector('#add');
add.addEventListener("click",addLi);
function addLi()
{
var inputText = document.getElementById('text').value;
if(inputText.length > 0)
{
var li = document.createElement('li');
var textNode = document.createTextNode(inputText + ' ');
var removeButton = document.createElement('button');
removeButton.classList.add('removeMe');
removeButton.textContent = "X";
var checkbox = document.createElement('input');
checkbox.type = "checkbox";
checkbox.id = "cb";
li.appendChild(checkbox);
li.appendChild(textNode);
li.appendChild(removeButton);
var ul = document.querySelector('#list');
ul.appendChild(li);
}
}
Sample ToDo List App:
Add some error handling - Ensure something has actually been entered in the text box before adding an li
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Simple JavaScript Todo</title>
<link rel="stylesheet" type="text/css" href="todo2.css">
</head>
<body>
<div class="wrapper">
<h1>Todo App:</h1>
<div id="inputarea">
<input type="text" id="text" placeholder="Add stuff..">
<button id="add">Add</button>
<button id="removeAll">Remove all</button>
</div>
<div class="border">
<ul id="list"></ul>
</div>
</div>
<script type="text/javascript" src="todo2.js"></script>
</body>
</html>
Sample ToDo List App:
Style the lis that are added now:
Remove bullet point, change font size, add border, set height
li {
list-style: none;
font-size: 22px;
padding: 5px;
border: 1px #D3D3D3 solid;
border-radius: 2px;
min-height: 25px;
margin-top: 2px;
background-color: #fff;
}
li:hover
{
box-shadow: 0px 0px 8px 2px rgba(0,0,0,0.55);
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Simple JavaScript Todo</title>
<link rel="stylesheet" type="text/css" href="todo2.css">
</head>
<body>
<div class="wrapper">
<h1>Todo App:</h1>
<div id="inputarea">
<input type="text" id="text" placeholder="Add stuff..">
<button id="add">Add</button>
<button id="removeAll">Remove all</button>
</div>
<div class="border">
<ul id="list"></ul>
</div>
</div>
<script type="text/javascript" src="todo2.js"></script>
</body>
</html>
Sample ToDo List App:
Style the button in the lis
button.removeMe {
padding: 5px;
font-size: 13px;
margin-left: 10px;
font-weight: 700;
float: right;
padding-left: 10px;
padding-right: 10px;
}
button.removeMe:hover {
background-color: #E0645C;
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Simple JavaScript Todo</title>
<link rel="stylesheet" type="text/css" href="todo2.css">
</head>
<body>
<div class="wrapper">
<h1>Todo App:</h1>
<div id="inputarea">
<input type="text" id="text" placeholder="Add stuff..">
<button id="add">Add</button>
<button id="removeAll">Remove all</button>
</div>
<div class="border">
<ul id="list"></ul>
</div>
</div>
<script type="text/javascript" src="todo2.js"></script>
</body>
</html>
var add = document.querySelector('#add');
add.addEventListener("click",addLi);
function addLi()
{
var inputText = document.getElementById('text').value;
if(inputText.length > 0)
{
var li = document.createElement('li');
var textNode = document.createTextNode(inputText + ' ');
var removeButton = document.createElement('button');
removeButton.classList.add('removeMe');
removeButton.textContent = "X";
removeButton.addEventListener("click",removeMe);//<--add this
var checkbox = document.createElement('input');
checkbox.type = "checkbox";
checkbox.id = "cb";
li.appendChild(checkbox);
li.appendChild(textNode);
li.appendChild(removeButton);
var ul = document.querySelector('#list');
ul.appendChild(li);
}
}
function removeMe()
{
}
Sample ToDo List App:
Add an event handler to each removeMe button
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Simple JavaScript Todo</title>
<link rel="stylesheet" type="text/css" href="todo2.css">
</head>
<body>
<div class="wrapper">
<h1>Todo App:</h1>
<div id="inputarea">
<input type="text" id="text" placeholder="Add stuff..">
<button id="add">Add</button>
<button id="removeAll">Remove all</button>
</div>
<div class="border">
<ul id="list"></ul>
</div>
</div>
<script type="text/javascript" src="todo2.js"></script>
</body>
</html>
//..
function removeMe()
{
//"this" is equivlent to the button that was clicked
var li_item = this.parentElement;
var ul_item = li_item.parentElement;
ul_item.removeChild(li_item);
}
Sample ToDo List App:
Add event handler code to remove li item
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Simple JavaScript Todo</title>
<link rel="stylesheet" type="text/css" href="todo2.css">
</head>
<body>
<div class="wrapper">
<h1>Todo App:</h1>
<div id="inputarea">
<input type="text" id="text" placeholder="Add stuff..">
<button id="add">Add</button>
<button id="removeAll">Remove all</button>
</div>
<div class="border">
<ul id="list"></ul>
</div>
</div>
<script type="text/javascript" src="todo2.js"></script>
</body>
</html>
//..
function addLi()
{
var inputText = document.getElementById('text').value;
if(inputText.length > 0)
{
var li = document.createElement('li');
var textNode = document.createTextNode(inputText + ' ');
var removeButton = document.createElement('button');
removeButton.classList.add('removeMe');
removeButton.textContent = "X";
removeButton.addEventListener("click",removeMe);
var checkbox = document.createElement('input');
checkbox.type = "checkbox";
checkbox.id = "cb";
checkbox.addEventListener("change",checked);//<--add this
li.appendChild(checkbox);
li.appendChild(textNode);
li.appendChild(removeButton);
var ul = document.querySelector('#list');
ul.appendChild(li);
}
}
function checked()//<---add this
{
}
Sample ToDo List App:
Add "change" event handler to the checkbox
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Simple JavaScript Todo</title>
<link rel="stylesheet" type="text/css" href="todo2.css">
</head>
<body>
<div class="wrapper">
<h1>Todo App:</h1>
<div id="inputarea">
<input type="text" id="text" placeholder="Add stuff..">
<button id="add">Add</button>
<button id="removeAll">Remove all</button>
</div>
<div class="border">
<ul id="list"></ul>
</div>
</div>
<script type="text/javascript" src="todo2.js"></script>
</body>
</html>
Sample ToDo List App:
.selected
{
text-decoration: line-through;
color: #D7D7D7;
background-color: rgba(255,255,255,0.6) ;
}
Add css selected class
//..
function checked()
{
//"this" is equivalent to the checkbox that changed
var li_item = this.parentElement;
li_item.classList.toggle("selected");
}
Sample ToDo List App:
Toggle the "selected" when the checkbox changes
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Simple JavaScript Todo</title>
<link rel="stylesheet" type="text/css" href="todo2.css">
</head>
<body>
<div class="wrapper">
<h1>Todo App:</h1>
<div id="inputarea">
<input type="text" id="text" placeholder="Add stuff..">
<button id="add">Add</button>
<button id="removeAll">Remove all</button>
</div>
<div class="border">
<ul id="list"></ul>
</div>
</div>
<script type="text/javascript" src="todo2.js"></script>
</body>
</html>
//..
var removeAll = document.querySelector('#removeAll');
removeAll.addEventListener("click",reset);
function reset()
{
}
Sample ToDo List App:
Set up the Remove All Button
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Simple JavaScript Todo</title>
<link rel="stylesheet" type="text/css" href="todo2.css">
</head>
<body>
<div class="wrapper">
<h1>Todo App:</h1>
<div id="inputarea">
<input type="text" id="text" placeholder="Add stuff..">
<button id="add">Add</button>
<button id="removeAll">Remove all</button>
</div>
<div class="border">
<ul id="list"></ul>
</div>
</div>
<script type="text/javascript" src="todo2.js"></script>
</body>
</html>
//..
var removeAll = document.querySelector('#removeAll');
removeAll.addEventListener("click",reset);
function reset()
{
var ul = document.querySelector('#list');
ul.innerHTML = '';
}
Sample ToDo List App:
Set up the Remove All Button
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Simple JavaScript Todo</title>
<link rel="stylesheet" type="text/css" href="todo2.css">
</head>
<body>
<div class="wrapper">
<h1>Todo App:</h1>
<div id="inputarea">
<input type="text" id="text" placeholder="Add stuff..">
<button id="add">Add</button>
<button id="removeAll">Remove all</button>
</div>
<div class="border">
<ul id="list"></ul>
</div>
</div>
<script type="text/javascript" src="todo2.js"></script>
</body>
</html>
//..
function loadItem(text)
{
var li = document.createElement('li');
var textNode = document.createTextNode(text + ' ');
var removeButton = document.createElement('button');
removeButton.classList.add('removeMe');
removeButton.textContent = "X";
removeButton.addEventListener("click",removeMe);
var checkbox = document.createElement('input');
checkbox.type = "checkbox";
checkbox.id = "cb";
checkbox.addEventListener("change",checked)
li.appendChild(checkbox);
li.appendChild(textNode);
li.appendChild(removeButton);
var ul = document.querySelector('#list');
ul.appendChild(li);
var numberOfitems = ul.children.length;
}
Sample ToDo List App:
Tidy Up a little
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Simple JavaScript Todo</title>
<link rel="stylesheet" type="text/css" href="todo2.css">
</head>
<body>
<div class="wrapper">
<h1>Todo App:</h1>
<div id="inputarea">
<input type="text" id="text" placeholder="Add stuff..">
<button id="add">Add</button>
<button id="removeAll">Remove all</button>
</div>
<div class="border">
<ul id="list"></ul>
</div>
</div>
<script type="text/javascript" src="todo2.js"></script>
</body>
</html>
//..
function addLi()
{
var inputText = document.getElementById('text').value;
if(inputText.length > 0)
{
loadItem(inputText);
}
}
Sample ToDo List App:
Tidy Up a little
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Simple JavaScript Todo</title>
<link rel="stylesheet" type="text/css" href="todo2.css">
</head>
<body>
<div class="wrapper">
<h1>Todo App:</h1>
<div id="inputarea">
<input type="text" id="text" placeholder="Add stuff..">
<button id="add">Add</button>
<button id="removeAll">Remove all</button>
</div>
<div class="border">
<ul id="list"></ul>
</div>
</div>
<script type="text/javascript" src="todo2.js"></script>
</body>
</html>
var itemRecord = [];
Sample ToDo List App:
Lets keep a record of all added items in an easy to read and access format also...i.e. an array
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Simple JavaScript Todo</title>
<link rel="stylesheet" type="text/css" href="todo2.css">
</head>
<body>
<div class="wrapper">
<h1>Todo App:</h1>
<div id="inputarea">
<input type="text" id="text" placeholder="Add stuff..">
<button id="add">Add</button>
<button id="removeAll">Remove all</button>
</div>
<div class="border">
<ul id="list"></ul>
</div>
</div>
<script type="text/javascript" src="todo2.js"></script>
</body>
</html>
//...
function addLi()
{
var inputText = document.getElementById('text').value;
if(inputText.length > 0)
{
loadItem(inputText);
itemRecord.push(inputText);
}
}
Sample ToDo List App:
Lets keep a record of all added items in an easy to read and access format also...i.e. an array
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Simple JavaScript Todo</title>
<link rel="stylesheet" type="text/css" href="todo2.css">
</head>
<body>
<div class="wrapper">
<h1>Todo App:</h1>
<div id="inputarea">
<input type="text" id="text" placeholder="Add stuff..">
<button id="add">Add</button>
<button id="removeAll">Remove all</button>
</div>
<div class="border">
<ul id="list"></ul>
</div>
</div>
<script type="text/javascript" src="todo2.js"></script>
</body>
</html>
//..
function saveItems()
{
var saveKey = "todoappitem";
var arrayConvertedToString = JSON.stringify(itemRecord);
localStorage.setItem(saveKey,arrayConvertedToString);
}
Sample ToDo List App:
When adding a new item, lets save it to localStorage also
Create a saveItems() function which will store the itemRecord array
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Simple JavaScript Todo</title>
<link rel="stylesheet" type="text/css" href="todo2.css">
</head>
<body>
<div class="wrapper">
<h1>Todo App:</h1>
<div id="inputarea">
<input type="text" id="text" placeholder="Add stuff..">
<button id="add">Add</button>
<button id="removeAll">Remove all</button>
</div>
<div class="border">
<ul id="list"></ul>
</div>
</div>
<script type="text/javascript" src="todo2.js"></script>
</body>
</html>
//..
function addLi()
{
var inputText = document.getElementById('text').value;
if(inputText.length > 0)
{
loadItem(inputText);
itemRecord.push(inputText);
saveItems();
}
}
Sample ToDo List App:
Call the saveItems() function from the addLi() function
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Simple JavaScript Todo</title>
<link rel="stylesheet" type="text/css" href="todo2.css">
</head>
<body>
<div class="wrapper">
<h1>Todo App:</h1>
<div id="inputarea">
<input type="text" id="text" placeholder="Add stuff..">
<button id="add">Add</button>
<button id="removeAll">Remove all</button>
</div>
<div class="border">
<ul id="list"></ul>
</div>
</div>
<script type="text/javascript" src="todo2.js"></script>
</body>
</html>
//..
function loadItems()
{
var saveKey = "todoappitem";
var arrayInStringFormat = localStorage.getItem(saveKey);
if(arrayInStringFormat !== null)
{
itemRecord = JSON.parse(arrayInStringFormat);
}
}
Sample ToDo List App:
Create a loadItems() function
get the string that was saved to localstorage in saveItems() function
convert back to array
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Simple JavaScript Todo</title>
<link rel="stylesheet" type="text/css" href="todo2.css">
</head>
<body>
<div class="wrapper">
<h1>Todo App:</h1>
<div id="inputarea">
<input type="text" id="text" placeholder="Add stuff..">
<button id="add">Add</button>
<button id="removeAll">Remove all</button>
</div>
<div class="border">
<ul id="list"></ul>
</div>
</div>
<script type="text/javascript" src="todo2.js"></script>
</body>
</html>
//..
function loadItems()
{
var saveKey = "todoappitem";
var arrayInStringFormat = localStorage.getItem(saveKey);
if(arrayInStringFormat !== null)
{
itemRecord = JSON.parse(arrayInStringFormat);
for(var i=0;i<itemRecord.length;i++)
{
loadItem(itemRecord[i]);
}
}
}
Sample ToDo List App:
For each item in the array, create a html element and show it in the list
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Simple JavaScript Todo</title>
<link rel="stylesheet" type="text/css" href="todo2.css">
</head>
<body>
<div class="wrapper">
<h1>Todo App:</h1>
<div id="inputarea">
<input type="text" id="text" placeholder="Add stuff..">
<button id="add">Add</button>
<button id="removeAll">Remove all</button>
</div>
<div class="border">
<ul id="list"></ul>
</div>
</div>
<script type="text/javascript" src="todo2.js"></script>
</body>
</html>
//..
function removeMe()
{
//"this" is equivlent to the button that was clicked
var li_item = this.parentElement;
var ul_item = li_item.parentElement;
var index = Array.prototype.indexOf.call(ul_item.children, li_item);
ul_item.removeChild(li_item);
}
Sample ToDo List App:
When we delete an item, we need to also delete it from the itemRecord array
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Simple JavaScript Todo</title>
<link rel="stylesheet" type="text/css" href="todo2.css">
</head>
<body>
<div class="wrapper">
<h1>Todo App:</h1>
<div id="inputarea">
<input type="text" id="text" placeholder="Add stuff..">
<button id="add">Add</button>
<button id="removeAll">Remove all</button>
</div>
<div class="border">
<ul id="list"></ul>
</div>
</div>
<script type="text/javascript" src="todo2.js"></script>
</body>
</html>
//..
function removeMe()
{
//"this" is equivlent to the button that was clicked
var li_item = this.parentElement;
var ul_item = li_item.parentElement;
var index = Array.prototype.indexOf.call(ul_item.children, li_item);
itemRecord.splice(index,1);
ul_item.removeChild(li_item);
}
Sample ToDo List App:
When we delete an item, we need to also delete it from the itemRecord array
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Simple JavaScript Todo</title>
<link rel="stylesheet" type="text/css" href="todo2.css">
</head>
<body>
<div class="wrapper">
<h1>Todo App:</h1>
<div id="inputarea">
<input type="text" id="text" placeholder="Add stuff..">
<button id="add">Add</button>
<button id="removeAll">Remove all</button>
</div>
<div class="border">
<ul id="list"></ul>
</div>
</div>
<script type="text/javascript" src="todo2.js"></script>
</body>
</html>
//..
function removeMe()
{
//"this" is equivlent to the button that was clicked
var li_item = this.parentElement;
var ul_item = li_item.parentElement;
var index = Array.prototype.indexOf.call(ul_item.children, li_item);
itemRecord.splice(index,1);
saveItems();
ul_item.removeChild(li_item);
}
Sample ToDo List App:
When we delete an item, we need to also delete it from the itemRecord array
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Simple JavaScript Todo</title>
<link rel="stylesheet" type="text/css" href="todo2.css">
</head>
<body>
<div class="wrapper">
<h1>Todo App:</h1>
<div id="inputarea">
<input type="text" id="text" placeholder="Add stuff..">
<button id="add">Add</button>
<button id="removeAll">Remove all</button>
</div>
<div class="border">
<ul id="list"></ul>
</div>
</div>
<script type="text/javascript" src="todo2.js"></script>
</body>
</html>
var checkedRecord = [];
Sample ToDo List App:
Lets also keep a record of which items have been check and which have been not
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Simple JavaScript Todo</title>
<link rel="stylesheet" type="text/css" href="todo2.css">
</head>
<body>
<div class="wrapper">
<h1>Todo App:</h1>
<div id="inputarea">
<input type="text" id="text" placeholder="Add stuff..">
<button id="add">Add</button>
<button id="removeAll">Remove all</button>
</div>
<div class="border">
<ul id="list"></ul>
</div>
</div>
<script type="text/javascript" src="todo2.js"></script>
</body>
</html>
//..
function addLi()
{
var inputText = document.getElementById('text').value;
if(inputText.length > 0)
{
loadItem(inputText);
itemRecord.push(inputText);
checkedRecord.push(false);
saveItems();
}
}
Sample ToDo List App:
Lets also keep a record of which items have been check and which have been not
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Simple JavaScript Todo</title>
<link rel="stylesheet" type="text/css" href="todo2.css">
</head>
<body>
<div class="wrapper">
<h1>Todo App:</h1>
<div id="inputarea">
<input type="text" id="text" placeholder="Add stuff..">
<button id="add">Add</button>
<button id="removeAll">Remove all</button>
</div>
<div class="border">
<ul id="list"></ul>
</div>
</div>
<script type="text/javascript" src="todo2.js"></script>
</body>
</html>
//..
function saveItems()
{
var saveKey = "todoappitem";
var arrayConvertedToString = JSON.stringify(itemRecord);
localStorage.setItem(saveKey,arrayConvertedToString);
var saveKeyChecked = "todoappchecked";
var checkedConvertedToString = JSON.stringify(checkedRecord);
localStorage.setItem(saveKeyChecked,checkedConvertedToString);
}
Sample ToDo List App:
Lets also keep a record of which items have been check and which have been not
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Simple JavaScript Todo</title>
<link rel="stylesheet" type="text/css" href="todo2.css">
</head>
<body>
<div class="wrapper">
<h1>Todo App:</h1>
<div id="inputarea">
<input type="text" id="text" placeholder="Add stuff..">
<button id="add">Add</button>
<button id="removeAll">Remove all</button>
</div>
<div class="border">
<ul id="list"></ul>
</div>
</div>
<script type="text/javascript" src="todo2.js"></script>
</body>
</html>
//..
function checked()
{
var li_item = this.parentElement;
li_item.classList.toggle("selected");
var ul_item = li_item.parentElement;
var index = Array.prototype.indexOf.call(ul_item.children, li_item);
checkedRecord[index] = !checkedRecord[index];
saveItems();
}
Sample ToDo List App:
When an item is checked, update the checkedRecord to set the corresponding index to true or false
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Simple JavaScript Todo</title>
<link rel="stylesheet" type="text/css" href="todo2.css">
</head>
<body>
<div class="wrapper">
<h1>Todo App:</h1>
<div id="inputarea">
<input type="text" id="text" placeholder="Add stuff..">
<button id="add">Add</button>
<button id="removeAll">Remove all</button>
</div>
<div class="border">
<ul id="list"></ul>
</div>
</div>
<script type="text/javascript" src="todo2.js"></script>
</body>
</html>
//..
function loadItems()
{
var saveKey = "todoappitem";
var arrayInStringFormat = localStorage.getItem(saveKey);
var saveKeyChecked = "todoappchecked";
var checkedInStringFormat = localStorage.getItem(saveKeyChecked);
if(arrayInStringFormat !== null && checkedInStringFormat !== null)
{
itemRecord = JSON.parse(arrayInStringFormat);
checkedRecord = JSON.parse(checkedInStringFormat);
for(var i=0;i<itemRecord.length;i++)
{
loadItem(itemRecord[i]);
}
}
}
Sample ToDo List App:
When loading the itemRecord, load the checkedRecord also
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Simple JavaScript Todo</title>
<link rel="stylesheet" type="text/css" href="todo2.css">
</head>
<body>
<div class="wrapper">
<h1>Todo App:</h1>
<div id="inputarea">
<input type="text" id="text" placeholder="Add stuff..">
<button id="add">Add</button>
<button id="removeAll">Remove all</button>
</div>
<div class="border">
<ul id="list"></ul>
</div>
</div>
<script type="text/javascript" src="todo2.js"></script>
</body>
</html>
//..
function loadItem(text,isChecked)
{
var li = document.createElement('li');
var textNode = document.createTextNode(text + ' ');
var removeButton = document.createElement('button');
removeButton.classList.add('removeMe');
removeButton.textContent = "X";
removeButton.addEventListener("click",removeMe);
var checkbox = document.createElement('input');
checkbox.type = "checkbox";
checkbox.id = "cb";
if(isChecked)//<---add this
{
checkbox.checked = true;<---add this
li.classList.toggle("selected");<---add this
}
checkbox.addEventListener("change",checked)
li.appendChild(checkbox);
li.appendChild(textNode);
li.appendChild(removeButton);
var ul = document.querySelector('#list');
ul.appendChild(li);
}
Sample ToDo List App:
Modify the loadItem() function to allow true or false checked to be set
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Simple JavaScript Todo</title>
<link rel="stylesheet" type="text/css" href="todo2.css">
</head>
<body>
<div class="wrapper">
<h1>Todo App:</h1>
<div id="inputarea">
<input type="text" id="text" placeholder="Add stuff..">
<button id="add">Add</button>
<button id="removeAll">Remove all</button>
</div>
<div class="border">
<ul id="list"></ul>
</div>
</div>
<script type="text/javascript" src="todo2.js"></script>
</body>
</html>
//..
function loadItems()
{
var saveKey = "todoappitem";
var arrayInStringFormat = localStorage.getItem(saveKey);
var saveKeyChecked = "todoappchecked";
var checkedInStringFormat = localStorage.getItem(saveKeyChecked);
if(arrayInStringFormat !== null && checkedInStringFormat !== null)
{
itemRecord = JSON.parse(arrayInStringFormat);
checkedRecord = JSON.parse(checkedInStringFormat);
for(var i=0;i<itemRecord.length;i++)
{
loadItem(itemRecord[i],checkedRecord[i]);
}
}
}
Sample ToDo List App:
Back in the loaditems() function, pass the saved checkedRecord value into the loadItem() function also
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Simple JavaScript Todo</title>
<link rel="stylesheet" type="text/css" href="todo2.css">
</head>
<body>
<div class="wrapper">
<h1>Todo App:</h1>
<div id="inputarea">
<input type="text" id="text" placeholder="Add stuff..">
<button id="add">Add</button>
<button id="removeAll">Remove all</button>
</div>
<div class="border">
<ul id="list"></ul>
</div>
</div>
<script type="text/javascript" src="todo2.js"></script>
</body>
</html>
//..
function removeMe()
{
//"this" is equivlent to the button that was clicked
var li_item = this.parentElement;
var ul_item = li_item.parentElement;
var index = Array.prototype.indexOf.call(ul_item.children, li_item);
itemRecord.splice(index,1);
checkedRecord.splice(index,1);//<--add this
saveItems();
ul_item.removeChild(li_item);
}
Sample ToDo List App:
When removing an item, also remove the corresponding checkedRecord item
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Simple JavaScript Todo</title>
<link rel="stylesheet" type="text/css" href="todo2.css">
</head>
<body>
<div class="wrapper">
<h1>Todo App:</h1>
<div id="inputarea">
<input type="text" id="text" placeholder="Add stuff..">
<button id="add">Add</button>
<button id="removeAll">Remove all</button>
</div>
<div class="border">
<ul id="list"></ul>
</div>
</div>
<script type="text/javascript" src="todo2.js"></script>
</body>
</html>
//..
function reset()
{
var ul = document.querySelector('#list');
ul.innerHTML = '';
itemRecord = [];
checkedRecord = [];
saveItems();
}
Sample ToDo List App:
Finally, when "remove all" is clicked, reset both record arrays and save
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Simple JavaScript Todo</title>
<link rel="stylesheet" type="text/css" href="todo2.css">
</head>
<body>
<div class="wrapper">
<h1>Todo App:</h1>
<div id="inputarea">
<input type="text" id="text" placeholder="Add stuff..">
<button id="add">Add</button>
<button id="removeAll">Remove all</button>
</div>
<div class="border">
<ul id="list"></ul>
</div>
</div>
<script type="text/javascript" src="todo2.js"></script>
</body>
</html>