You can also find all 100 answers here π Devinterview.io - jQuery
jQuery serves as a fast, compact, and feature-rich JavaScript library. It simplifies the handling of HTML documents, event handling, and animation.
-
DOM Manipulation: jQuery makes DOM element selection, manipulation, and traversal more intuitive and robust than vanilla JavaScript.
-
Cross-Browser Compatibility: It offers consistent behavior across different browsers, abstracting underlying variations.
-
AJAX: For asynchronous data exchanges, jQuery streamlines tasks like making HTTP requests and handling server responses.
-
Event Handling and Propagation: jQuery provides a unified event model that ensures effective event delegation and management.
-
Effects and Animations: It simplifies intricate visual effects and animations, elevating the interactivity and visual appeal of web applications.
-
Utilities: jQuery also includes a variety of built-in utilities, easing tasks such as data management, error handling, and more.
Here is the jQuery code:
// jQuery
$('#myDiv').text('Hello, jQuery!');
Here is the equivalent Vanilla JS code:
// Vanilla JS
document.getElementById('myDiv').textContent = 'Hello, Vanilla JavaScript!';
To include jQuery in your web page, you generally have three options that involve both local and global content delivery networks (CDN), as well as a direct download.
Add the following code inside your HTML head
section:
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
This method offers easy access to the latest jQuery version. However, it necessitates an internet connection and is subject to the host's uptime and CDN load latency.
You can host the jQuery library on your server and refer to it using a relative link. Here's the example code:
<script src="/path-to-jquery/jquery-3.6.0.min.js"></script>
This method involves downloading the jQuery library directly, saving it in your project folder, and linking it from there. Here's the sample HTML code:
<script src="path-to/jquery-3.6.0.min.js"></script>
This method gives you more control over the jQuery library version but requires manual updates. Keep in mind that the file path in the src
attribute here is relative to the HTML file location.
While jQuery and JavaScript share some common features, there are notable distinctions in terms of their purpose, capabilities, and syntax.
-
Use-Cases:
- jQuery: Efficient DOM traversal and manipulation, cross-browser compatibility, and simplification of common JavaScript tasks.
- JavaScript: A versatile, full-fledged programming language for web development, server-side scripting, and more.
-
Syntax Style:
- jQuery: Emphasizes method chaining and a more concise, streamlined syntax.
- JavaScript: Offers more flexibility and a traditional syntax style.
-
Operating Environment:
- jQuery: Primarily designed to operate within web browsers.
- JavaScript: A more general-purpose language, often used in server-side environments through platforms like Node.js.
-
DOM Manipulation:
- jQuery: Uses a set of methods like
.append()
and.remove()
to simplify DOM manipulation. - JavaScript: Provides a comprehensive DOM API that allows you to manipulate HTML elements, attributes, and styles.
- jQuery: Uses a set of methods like
-
Event Handling:
- jQuery: Offers event handling shortcuts like
.click()
and.on()
to attach handlers. - JavaScript: Utilizes methods like
.addEventListener()
for event delegation.
- jQuery: Offers event handling shortcuts like
-
Syntax Styles:
- jQuery: Commonly seen with
$()
selector notation and method chaining. - JavaScript: Employs dot notation for object properties and more linear function calling.
- jQuery: Commonly seen with
Here is the JavaScript code:
// JavaScript
document.getElementById('myButton').addEventListener('click', function() {
console.log('Button clicked.');
});
Here is the equivalent jQuery code:
// jQuery
$('#myButton').on('click', function() {
console.log('Button clicked.');
});
Using jQuery, you can ensure the DOM is fully loaded before executing JavaScript. Combine the ready()
method with a self-invoking function for reliability.
The ready()
method ensures the execution of JavaScript after the DOM is fully loaded, providing a better user experience.
Here is the code:
// Using ready()
$(document).ready(function() {
// DOM is fully loaded
});
You can further ensure that the DOM is indeed ready by combining an Immediately-Invoked Function Expression (IIFE) with the $
alias in a modular way.
Here is the code:
// Using an IIFE
(function($) {
// DOM is fully loaded
})(jQuery);
The dollar sign ($
) in jQuery functions as a shorthand for the jQuery
object, making the code more concise and readable.
In the early days of web development, browsers had inconsistent and cumbersome APIs. This hurdle inspired many developers to create frameworks to simplify things. jQuery was one such gem, released way back in 2006.
Recognizing that selecting HTML elements was a frequent task, the creators provided a shortcut: the $
function could be used instead of the verbose jQuery
function.
- Versatile Function: The
$
orjQuery
functions can serve multiple purposes, from selecting DOM elements to facilitating AJAX requests. - Global vs. Local Scope Considerations: When used responsibly,
$
can exist in both global and local scopes. However, to avoid conflicts, it's commonly advised to keep it in the local scope, often within a ready event handler or an Immediately Invoked Function Expression (IIFE). - Reassigning Caution: While you can reassign
$
to another object or function, this practice should be approached with thoughtfulness to prevent confusion and potential issues in larger projects.
Here's a simple demonstration of using the $
function to select all button
elements and attach a click event:
$(document).ready(function() {
$('button').click(function() {
// Handle the button click
});
});
In larger projects or to avoid conflicts, you can enclose the $
shorthand within an Immediately Invoked Function Expression, safeguarding its local scope:
(function($) {
// Now $ is a local variable
$(document).ready(function() {
$('button').click(function() {
// Handle the button click
});
});
})(jQuery);
The jQuery
document.ready()
function is essential for ensuring that your JavaScript code runs after the DOM has loaded. This early initialization helps avoid issues with code accessing elements that haven't loaded yet.
Without $(document).ready()
, any code that tries to manipulate or interact with the DOM might fail if the related elements aren't fully available.
-
DOM Element Selection: Attempting to select elements using jQuery or by their ID or class can be problematic if they haven't been loaded. The
$(document).ready()
mechanism ensures that these selections occur only after the DOM is ready. -
Event Binding: Code that attaches event listeners to DOM elements or specific browser events won't function as intended without the
ready()
check. -
DOM Manipulation: Calls to modify the DOM (such as adding or removing elements) are generally unreliable before the DOM is fully loaded without
ready()
.
Using $(document).ready()
also reinforces best practices in web design that can lead to more efficient websites:
-
Resource Loading: Delaying the execution of non-critical JavaScript until the DOM is ready can improve the initial rendering speed of a webpage.
-
User Experience: By ensuring that the initial page interaction is smooth and error-free, user experience is enhanced.
Here's how code might behave without document.ready()
when elements aren't fully loaded:
// This code might misbehave if the DOM isn't ready yet
$('.my-element').css('color', 'red');
// This event attachment could fail if #my-button isn't loaded yet
$('#my-button').on('click', function() {
console.log('Button clicked!');
});
Here is the revised code utilizing ready()
// Using $(document).ready ensures these operations occur only after the DOM is fully loaded
$(document).ready(function() {
// Safely manipulate elements after the DOM is loaded
$('.my-element').css('color', 'red');
// Attach events after the DOM is ready
$('#my-button').on('click', function() {
console.log('Button clicked!');
});
});
To select an HTML element with a specific ID using jQuery, you need to use the #
character.
The ID selector in jQuery is a variation of the same method employed by CSS: it uses a #
followed by the unique ID of the element.
Here is the jQuery code:
// Selects the element with the ID "myElement"
$('#myElement').css('color', 'red');
- Why should IDs be unique in a document?
- How does the
#
character enable the selection of unique IDs in jQuery?
Chaining in jQuery refers to a powerful technique where multiple methods are applied to the same set of elements in a single line of code. This results in a sequence of actions being performed consistently and efficiently.
Let's use a simple example to illustrate how chaining works. Consider an HTML file with a <button>
element.
<button id="myButton">Click me!</button>
Here's how you might implement the jQuery chain to, say, first hide the button and then attach a click event that triggers an alert and slideToggle()
to show/hide the button.
$('#myButton').hide().click(function() {
alert('Button clicked!');
}).show();
The same operations, without chaining, would look like this:
var btn = $('#myButton'); // Store reference to the button
btn.hide(); // Hide the button
btn.click(function() { // Add click event handler
alert('Button clicked!');
});
btn.show(); // Show the button
-
Readability: Chained methods often make your code more readable, with a clear sequence of actions on a set of elements.
-
Maintainability: Chains are easier to maintain and modify, especially for tasks involving a set of common actions on the same elements.
-
Performance: Chaining, in most cases, is more performant than non-chaining. It doesn't require re-selection of elements, and the browser doesn't need to update the DOM after each individual operation.
-
Mind Method Output: Ensure each method in the chain returns the expected output for successful chaining.
-
Consider Line Length: While chaining can make code more compact, excessive chaining or complex operations in a chain can make the code hard to read.
-
Semantic Meaning: It's essential to ensure the combined methods in the chain make sense in the order they are used. Sometimes, a sequence of methods might make more semantic sense if broken into easily understandable steps.
-
Potential for Errors: If you aren't familiar with the exact behavior of each method when used in a chain, it might lead to unexpected results.
-
Use What Makes Sense: Not every action needs to be part of a chain. Breaking chains into distinct steps if it improves clarity and readability can be beneficial.
-
Group Similar Actions: If you are performing a series of related or dependent operations on a set of elements, it often makes sense to group them into a single chain.
-
Reusability and Flexibility: While chaining can lead to efficient code, you might sometimes want to refrain from chaining to improve reusability, testability, or debugging.
-
Ambiguity: Chain termination or changes in chain context can render the code ambiguous, leading to unexpected results.
-
Code Bloat: Over-reliance on chaining or writing longer chains than necessary can increase code complexity and reduce readability.
Many popular websites and web applications utilize jQuery to streamline front-end development. Chaining offers a way to execute multiple actions efficiently, contributing to a better and more responsive user experience. However, as web technologies evolved, direct DOM manipulation and performance considerations often favor more modern approaches like direct DOM manipulation (with vanilla JavaScript) or the use of more advanced libraries/frameworks such as React and Vue.
Selectors in jQuery let you target specific HTML elements, like div
, p
or CSS classes, for operations like manipulation and event handling.
When you make a selection using a jQuery method such as $('selector')
, the method builds a set of matched elements based on your selector.
-
Basic: Use the element name, class, or ID.
- Example:
$('div')
,$('.myClass')
,$('#myId')
- Example:
-
Attribute: Pick elements based on their attributes.
- Example:
$('input[type="text"]')
- Example:
-
Hierarchical: Select based on parent-child or ancestor relationships.
- Example:
$('ul li')
,$('div > span')
- Example:
-
Pseudo-Classes: Match elements based on state or position in a collection.
- Example:
$('form :input')
,$('p:first')
- Example:
-
Pseudo-Elements: Select role-based distinguishing elements.
- Example:
$('p:even')
- Example:
Most jQuery methods employ the "Sizzle" selector engine, allowing for complex jQuery-style selectors.
For example, $('div > p:first-child')
selects all the first child p
elements under a div.
To select HTML elements by class name using jQuery, you need to:
- Set the class name as the selector.
- Utilize
.text()
or.append()
to verify the selection.
Let's see the code:
In jQuery, you can select elements using a class selector, which is preceeded by a period .
. Here is sample HTML:
<div class="container">
<div class="item red">Red Item</div>
<div class="item">Default Item</div>
<div id="output"></div>
</div>
And here is the jQuery to select elements:
// Select elements with the 'red' class
var redItems = $(".red");
// Output the number of selected items
$("#output").text("Found " + redItems.length + " red items.");
// Also output the text content of each selected item
redItems.each(function() {
$("#output").append("<p>" + $(this).text() + "</p>");
});
The jQuery selection method $(".red")
is equivalent to the following CSS:
.red {
/* Selects elements with the class 'red' */
}
You can use CSS-based selectors like div p
with jQuery to retrieve all paragraphs contained within a div
:
// Method 1: Using find()
let paragraphs = $('div').find('p');
// Method 2: Using context
let paragraphs = $('p', 'div');
To select multiple elements with different IDs
in jQuery, you can either create a chain of selectors or select them based on a common class using $('[class="yourClass"]').filter(...)
. The former is simpler and more straightforward.
By chaining selectors using the ',' symbol:
$('#first, #second, #third').css('color', 'red'); // Selects elements with IDs "first", "second", and "third"
This method combines $('[class="yourClass"]')
with .filter()
to restrict the selection to specific ID values:
$('[class="yourClass"]').filter('#first, #second, #third').css('color', 'red');
In jQuery, you can access and modify HTML attributes using the .attr()
method. This function is versatile, allowing you to perform various actions.
-
Get: Provide the attribute name to retrieve its value. If you select multiple elements, it returns the attribute value from the first element.
-
Set: Specify the attribute name and the new value. You can also use a callback function to generate the new value based on the current one.
// Get 'title' attribute value of the first 'img' element let title = $("img").attr("title"); // Set 'title' attribute for all 'img' elements $("img").attr("title", "Amazing Image"); // Use a callback to update the 'src' attribute $("img").attr("src", function(i, val) { return `newPath/image${i}.jpg`; });
To remove an attribute, pass null as the value inside .attr()
.
// Remove 'title' attribute from all <img> elements
$("img").attr("title", null);
Here is the JavaScript code:
$(document).ready(function() {
$(".toggle-list-styles").click(function() {
$("ul").attr("style", function(ind,oldVal) {
return (oldVal == "list-style-type: none;" ? "list-style-type: disc;" : "list-style-type: none;");
});
});
});
This code will set or remove the list style attribute when a toggle button is clicked.
In jQuery, class manipulation methods can add, remove or toggle CSS classes dynamically.
- .addClass(): Add one or multiple classes.
- .removeClass(): Remove one, multiple, or all classes.
- .toggleClass(): Toggle one or more classes based on a flag.
- .hasClass(): Check if a specific class is already applied.
- Method Chaining: jQuery methods can be chained together for compact, easier-to-read code.
- Callback Functions: These methods support optional callback functions.
- Class List Handling (.addClass()): The methods can also accept a callable function that returns a space-separated list of classes.
Here is the JavaScript code:
<html>
<head>
<style>
.highlighted {
background-color: yellow;
}
</style>
</head>
<body>
<p id="demo" class="intro">This is a paragraph.</p>
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script>
// Method Chaining
$('#demo').removeClass('intro').addClass('highlighted').text('This paragraph is highlighted!');
</script>
</body>
</html>
In this example, the code removes the class intro
, adds the class highlighted
, and then sets the text, all in a single line.
jQuery filters are a set of methods used to select specific elements based on pre-defined criteria or their current state.
-
:first
and:last
: Selects the first or last matched element.$('div:first').addClass('highlight');
-
$()
: A multi-purpose method for DOM manipulation. With selectors, it's often used to create new jQuery collections.let paragraph = $("<p>Some text</p>");
-
.add()
: Adds elements to the existing collection. -
.slice()
: Subsets the current collection. -
.filter()
: Reduces the set of matched elements to those that match the selector or pass the function's test. -
.not()
: Removes elements from the set of matched elements.