Is there an ‘exists’ function for jQuery?
How can I check the existence of an element in jQuery?
The current code that I have is this:
if ($(selector).length > 0) {
// Do something
}
Is there a more elegant way to approach this? Perhaps a plugin or a function?
No, jQuery does not have a built-in “exists” function. The most common and reliable way to check if an element exists in jQuery is by using the .length property of the jQuery collection returned by your selector, which is exactly what your current code does. However, there are several alternative approaches and plugins you can consider for a more elegant solution depending on your specific needs.
Contents
- The Standard .length Property Method
- Alternative Approaches and Simplifications
- Creating Custom jQuery Plugins
- Third-Party Plugin Options
- When You Don’t Need to Check Element Existence
- Best Practices and Recommendations
The Standard .length Property Method
Your current approach using $(selector).length > 0 is actually the standard and recommended method in jQuery. According to the official jQuery Learning Center, this is the proper way to check element existence.
if ($('#myElement').length > 0) {
// Element exists
}
The .length property returns the number of elements that match the selector:
- Returns 0 if no elements match (falsy)
- Returns a number > 0 if elements match (truthy)
As Stack Overflow discussions confirm, this approach is reliable and works consistently across all browsers. The jQuery collection itself will never be undefined, so you won’t get errors trying to access the .length property.
Alternative Approaches and Simplifications
While your current code is perfectly valid, there are a few ways to simplify it for cleaner syntax:
Direct Length Check
You can omit the > 0 comparison since 0 is falsy and any positive number is truthy:
if ($('#myElement').length) {
// Element exists
}
Boolean Conversion
Some developers prefer to explicitly convert to boolean:
if (!!$('#myElement').length) {
// Element exists
}
Using .size() Method
jQuery also provides a .size() method that does the same thing as .length, though .length is more commonly used and slightly more performant:
if ($('#myElement').size()) {
// Element exists
}
As SitePoint explains, both .length and .size() work effectively for checking element existence, but .length is the preferred approach.
Creating Custom jQuery Plugins
If you prefer a more elegant syntax, you can create custom jQuery plugins. Here are a couple of popular approaches:
Simple Exists Function
Create a standalone function that returns a boolean:
function exists(selector) {
return $(selector).length > 0;
}
// Usage
if (exists('#myElement')) {
// Element exists
}
jQuery Plugin with Callback
For a more jQuery-like approach, you can extend the jQuery prototype:
// Simple plugin
$.fn.exists = function() {
return this.length > 0;
};
// Usage
if ($('#myElement').exists()) {
// Element exists
}
Advanced Plugin with Callback
As shown on CSS-Tricks, you can create a more sophisticated plugin that accepts a callback:
$.fn.exists = function(callback) {
var args = [].slice.call(arguments, 1);
if (this.length) {
callback.call(this, args);
}
return this;
};
// Usage
$('#myElement').exists(function() {
// This runs only if element exists
$(this).addClass('highlight');
});
This approach chains nicely and provides more flexibility in how you handle existing elements.
Third-Party Plugin Options
If you don’t want to write your own plugin, there are some third-party options available:
jquery-exists Package
There’s an npm package called jquery-exists that provides this functionality. However, based on the npm registry, this package appears to be largely dormant and hasn’t been updated in many years.
Checking Plugin Existence
If your question extends to checking if jQuery plugins themselves exist (rather than DOM elements), you can use the typeof operator:
// Check if a jQuery plugin exists
if (typeof $.fn.marquee === "function") {
// Plugin exists, use it
$('#myElement').marquee();
}
As Stack Overflow explains, this is the modern approach since jQuery’s isFunction() method was deprecated in version 3.3.
When You Don’t Need to Check Element Existence
An important insight from the official jQuery documentation is that it isn’t always necessary to test whether an element exists. jQuery methods are designed to handle non-existent elements gracefully:
// This works fine even if #myElement doesn't exist
$('#myElement').hide();
$('#myElement').addClass('hidden');
The code above will simply do nothing if the element doesn’t exist, without throwing errors. This can make your code cleaner and more readable in many cases.
As noted in multiple sources, only check for element existence when you need to:
- Handle different logic for existing vs. non-existing elements
- Load resources conditionally (like external scripts)
- Apply different behaviors based on element presence
Best Practices and Recommendations
Based on the research findings, here are the best practices for checking element existence in jQuery:
Recommended Approach
Stick with the .length property method as it’s:
- Standard practice - widely documented and recommended
- Reliable - works consistently across all browsers
- Performant - minimal overhead compared to other methods
- Readable - clearly communicates intent
if ($('#myElement').length) {
// Element exists
}
When to Consider Alternatives
Consider creating a custom plugin when:
- You need to check element existence frequently throughout your codebase
- You want more elegant, readable syntax
- You need callback functionality for existing elements
Code Organization
If you do create custom functions or plugins:
- Keep them in a centralized utility file
- Document them clearly for your team
- Consider using jQuery’s
$.extend()or$.fn.extend()for proper namespacing
Performance Considerations
For performance-critical applications:
- Use
.lengthdirectly (simpler than function calls) - Cache your jQuery selectors when using them multiple times
- Consider vanilla JavaScript alternatives like
document.querySelector()for simple existence checks
As Chris Pietschmann notes, vanilla JavaScript methods can be more performant if you don’t need the full jQuery functionality.
Sources
- Official jQuery Learning Center - How do I test whether an element exists?
- GeeksforGeeks - How to check element exists or not in jQuery
- SitePoint - jQuery Check if an Element Exists
- CSS-Tricks - Check if Element Exists
- Stack Overflow - Check if element exists in jQuery
- Stack Overflow - Is there an “exists” function for jQuery?
- Mkyong.com - Check if element exists in jQuery
- npm - jquery-exists package
- Kevin Leary - jQuery Check if Element Exists
- Chris Pietschmann - Check if element exists using JavaScript or jQuery
Conclusion
jQuery does not have a built-in “exists” function, making your current approach using $(selector).length > 0 the standard and recommended method. While this works perfectly fine, you have several options if you prefer more elegant syntax: create custom functions, jQuery plugins, or consider third-party packages.
The .length property remains the most reliable and performant solution, but custom plugins can improve code readability and maintainability in larger projects. Remember that jQuery methods often handle non-existent elements gracefully, so only check for existence when your logic truly requires different behavior based on element presence.
For most use cases, your current code is already optimal, but the custom plugin approaches shown above can make your jQuery code more readable and consistent with other jQuery method calls.