jQuery is a javascript library that makes it easier for event handling.
I created a calculator with jQuery to help students at dpl understand the power of jQuery.
Why use jQuery?
- jQuery is a javascript library that makes event handling a lot easier
- It has many helper function we can use to make manipulating the DOM
Here's a link to see all the jQuery documentation
Basic jQuery Syntax
- First we need to call on the jQuery libraru with a ‘$’
- Then we use the element selector. We can get the element tag, id, or class
- Then we can call any jQuery methods we want on it.
Here's how it looks
- $(‘SELECTED_ELEMENT’).METHOD()
Selecting with Element tag
- $(‘h1’)
Selecting with an id
- $(‘#header’)
Selecing with a class
- $(‘.btn’)
With jquery we can grab elements with less syntax as vanilla javascript
vanilla js way of getting element
- var numberButtons = getElementsByClassName(‘number_button’);
jQuery variables usually starts with a '$'. It will return an array with the same class name
- var $numberButtons = $(‘.number_button’)</p>
this will return an array of all html elements with the 'number_button' class
- $(‘.number_button’);
Now that we understand the basic syntax of jQuery lets build the calculator
jQuery Calculator
HTML Code
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/materialize/0.98.2/css/materialize.min.css">
<h1 id='header' class='center'>jQuery Calculator</h1>
<div class="jumbotron">
<h3 id='output' class='center'></h3>
</div>
<div class='row'>
<div class='col s3 offset-s9 center'>
<button id='clear_button' class='btn btn-large red'>C</button>
</div>
</div>
<div class='row'>
<div class='col s3 center'>
<button class='btn btn-large blue number_button'>1</button>
</div>
<div class='col s3 center'>
<button class='btn btn-large blue number_button'>2</button>
</div>
<div class='col s3 center'>
<button class='btn btn-large blue number_button'>3</button>
</div>
<div class='col s3 center'>
<button class='btn btn-large green operator_button'>+</button>
</div>
</div>
<div class='row'>
<div class='col s3 center'>
<button class='btn btn-large blue number_button'>4</button>
</div>
<div class='col s3 center'>
<button class='btn btn-large blue number_button'>5</button>
</div>
<div class='col s3 center'>
<button class='btn btn-large blue number_button'>6</button>
</div>
<div class='col s3 center'>
<button class='btn btn-large green operator_button'>-</button>
</div>
</div>
<div class='row'>
<div class='col s3 center'>
<button class='btn btn-large blue number_button'>7</button>
</div>
<div class='col s3 center'>
<button class='btn btn-large blue number_button'>8</button>
</div>
<div class='col s3 center'>
<button class='btn btn-large blue number_button'>9</button>
</div>
<div class='col s3 center'>
<button class='btn btn-large green operator_button'>x</button>
</div>
</div>
<div class='row'>
<div class='col s3 center'>
<button class='btn btn-large number_button'>.</button>
</div>
<div class='col s3 center'>
<button class='btn btn-large blue number_button'>0</button>
</div>
<div class='col s3 center'>
<button id='equal_button' class='btn btn-large btn-success'>=</button>
</div>
<div class='col s3 center'>
<button class='btn btn-large green operator_button'>/</button>
</div>
</div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>Javascript Code
// need to wrap the whole thing in a document.ready because we want everything in the DOM to load before adding
// event handlers to them
$(document).ready(function() {
// We need variables to save our numbers and operators
var leftNumber = '';
var rightNumber = '';
var operator = '';
var result = '';
// Now we need to check when a user clicks a number
$('.number_button').click( function() {
// check if the user has selected on operator yet
if(operator) {
rightNumber += this.innerText;
} else {
leftNumber += this.innerText;
}
setScreen(leftNumber + ' ' + operator + ' ' + rightNumber);
// console.log('right Number', rightNumber);
// console.log('left number', leftNumber);
});
// Here we check which operator button they clicked
$('.operator_button').click( function() {
// console.log(this.innerText);
operator = this.innerText;
setScreen(leftNumber + ' ' + operator)
});
// Check when they press the equal button
$('#equal_button').click( function() {
// console.log(leftNumber);
// console.log(operator);
// console.log(rightNumber);
var firstNum = parseFloat(leftNumber);
var secondNum = parseFloat(rightNumber);
if(leftNumber && operator && rightNumber) {
switch(operator) {
case '+':
result = firstNum + secondNum;
break;
case '-':
result = firstNum - secondNum;
break;
case 'x':
result = firstNum * secondNum;
break;
case '/':
result = firstNum / secondNum;
if(secondNum === 0) {
result = 'Cannot Divide By 0. Please Clear and try again';
}
break;
}
} else {
result = 'Invalid Operation Clear and Try Again.'
}
setScreen(result)
// set result to the first number and clears the second, so user can keep computing
leftNumber = result;
rightNumber = '';
});
// Clear everything out when user clicks it
$('#clear_button').click( function() {
leftNumber = '';
rightNumber = '';
operator = '';
setScreen('');
});
function setScreen(answer) {
// using jQuery to get my output div
// .text() is a jQuery method that takes in an argument and will display it to the innerText
$('#output').text(answer)
}
});jQuery is a powerful library for manipulating the DOM. I hope you guys enjoyed reading this blog post!