In Mootools, I'd just run if ($('target')) { ... }. Does if ($('#target')) { ... } in jQuery work the same way?
11 Answers
As the other commenters are suggesting the most efficient way to do it seems to be:
if ($(selector).length ) { // Do something } If you absolutely must have an exists() function - which will be slower- you can do:
jQuery.fn.exists = function(){return this.length>0;} Then in your code you can use
if ($(selector).exists()) { // Do something } As answered here
13 Comments
exists... IMHO :) Actually adding a one-liner extension, like exists() that is 2 characters longer than what it replaces is silly to begin with for JS! :)no, jquery always returns a jquery object regardless if a selector was matched or not. You need to use .length
if ( $('#someDiv').length ){ } 1 Comment
if you used:
jQuery.fn.exists = function(){return ($(this).length > 0);} if ($(selector).exists()) { } you would imply that chaining was possible when it is not.
This would be better
jQuery.exists = function(selector) {return ($(selector).length > 0);} if ($.exists(selector)) { } 2 Comments
.exist() returns a bool, on which you cannot call jQuery methods, see comments below this answer.I think most of the people replying here didn't quite understand the question, or else I might be mistaken.
The question is "how to check whether or not a selector exists in jQuery."
Most people have taken this for "how to check whether an element exists in the DOM using jQuery." Hardly interchangeable.
jQuery allows you to create custom selectors, but see here what happens when you try to use on e before initializing it;
$(':YEAH'); "Syntax error, unrecognized expression: YEAH" After running into this, I realized it was simply a matter of checking
if ($.expr[':']['YEAH']) { // Query for your :YEAH selector with ease of mind. } Cheers.
1 Comment
if ($('#elem')[0]) { // do stuff } 2 Comments
Yet another way:
$('#elem').each(function(){ // do stuff }); 3 Comments
Alternatively:
if( jQuery('#elem').get(0) ) {} 1 Comment
.length (and slower). $('#elem')[0] would do the same.jQuery.fn.exists = function(selector, callback) { var $this = $(this); $this.each(function() { callback.call(this, ($(this).find(selector).length > 0)); }); }; 1 Comment
each and a callback if you just want to know if there was zero or more matches? I now feel more stupid than I was before I read this! -1.I prefer the
if (jQuery("#anyElement").is("*")){...} Which basically checks if this elements is a kind of "*" (any element). Just a cleaner syntax and the "is" makes more sense inside an "if"
2 Comments
For me .exists doesn't work, so I use the index :
if ($("#elem").index() ! = -1) {} 2 Comments
.length. This answer is best deleted (voting to delete).firstly create a function:
$.fn.is_exists = function(){ return document.getElementById(selector) } then
if($(selector).is_exists()){ ... }
existsfunction for jQuery?