Despite its age, jQuery is still a popular library for manipulating the DOM.
In this article, we’ll look at some tips for working with jQuery.
jQuery Selectors on Custom Data Attributes
We can select custom data attributes by passing the data attribute name and value into the CSS selector.
For instance, we can write:
$("ul[data-group='fruits'] li[data-choice='apple']")
The code gets the ul with the data-group
attribute set to fruits
and the li inside it with the data-choice
attribute set to apple
.
We can also get elements with a data attribute not equal to something.
For instance, we can write:
$("ul[data-group='`fruits`'] li:not([data-choice='`apple`'])")
This gets the ul element with data-group
attribute set to fruits
.
And data-choice
attribute is not set to apple
as indicated by the not
selector.
jQuery UI has the custom :data
selector.
Check State Changed Even with jQuery Checkbox
To watch for state changes of a checkbox, we can call the change
method.
For instance, we can write:
$("#checkbox").change(function() {
if(this.checked) {
//...
}
});
We get the checkbox with ID checkbox
and call change
on it to listen for changes for the checkbox.
In the callback we pass in, we use this.checked
to get the checked value of the checkbox.
Alternatively, we can use the on
method to listen for the change event.
For example, we can write:
$(document).on('change', '#checkbox', function() {
if (this.checked) {
//...
}
});
We call the on
method to listen to events.
We call it on document
so that we can do event delegation.
'change'
means we’re listening to the change event.
'#checkbox'
is the selector for the checkbox element that we’re listening to.
The 3rd argument is the callback.
document.getElementById vs jQuery $()
We can achieve the same effect as document.getElementById
with the $
function.
To do that, we can write:
const fooEl = $('#foo')[0];
The [0]
is what’s needed to get the DOM object of the element with ID foo
.
That is the same as:
document.getElementById('foo');
Removing Multiple Classes with jQuery
To remove multiple classes with jQuery, we can call removeClass
to remove multiple classes.
Each class should be separated by a space in a string.
For instance, we can write:
$("#foo").removeClass("class1 class2");
Then we cal remove the class1
and class2
classes from the element with ID foo
with the removeClass
method.
Escaping HTML Strings with jQuery
To escape HTML strings, we can pass it through the text
method and then call the html
method to return text that’s escaped with HTML entities.
For instance, if we have:
$('<div/>').text('peter, paul & mary').html();
We get:
"peter, paul & mary"
returned.
Get Class Name of an Element
To get the class names of an element, we can do that in various way,
One way is to use the attr
method with 'class'
as the argument.
For instance, we can write:
const className = $('#foo').attr('class');
The get the class
attribute of the element with ID foo
as a string.
In event handlers for jQuery objects, we can use the className
property of this
to get the element.
For example, we can write:
$('#foo').click(function() {
console.log(this.className);
});
We get the className
property in the click
handler for the element with ID foo
.
The hasClass
method lets us check if a class is added to an element.
For instance, we can write:
$('#foo').hasClass('class');
We can check if the class
class name is added to the element with ID foo
.
Check if Object is a jQuery Object
We can check if an object is a jQuery object using the instanceof
operator.
For example, we can write:
if (obj instanceof jQuery){
console.log('obj is a jQuery object');
}
We just check of obj
is an instance of jQuery
to check that.
Show a “ Loading…” Message Using jQuery
To make this easy, we just add an element with a loading message and show and hide it depending on what we’re doing.
For instance, for an ajax request, we can create a loading message by writing:
<div id="loading">
<p>loading...</p>
</div>
Then we can write:
$(document)
.ajaxStart(() => {
$('#loading').show();
}).ajaxStop(() => {
$('#loading').hide();
});
to toggle a message on and off.
We toggle the loading message on when an ajax request starts with ajaxStart
‘s callback.
And we do hide the loading message when the ajax request is done with the ajaxStop
callback.
Conclusion
We can check if a checkbox if checked by listening to various events.
And we can show or hide a loading message with jQuery.
Strings can also be escaped with HTML entities.
Class names can be retrieved in various ways.