It's funny, I was going to suggest the same thing, right down to the method name, but Hamish beat me to it. :-)
It's interesting that people don't immediately think of using $('#id').length > 0 (with or without the > 0). It tells me that they're not aware of a fundamental fact about jQuery: The $() function always returns an array-like object that has .length and [0..n] properties just like any Array - even when you use an ID selector. Once you understand that, a lot of things fall into place. Maybe the documentation should emphasize this point more. Consider the corresponding question for a string: "Does the string have any characters in it?" You could code: if( string.match(/.+/) ) { alert('The string has text'); } But you're more likely to write: if( string.length > 0 ) { alert('The string has text'); } Of course, every JavaScript programmer should acquire some familiarity with regular expressions, and should know why .match(/.+/) works - but you probably wouldn't use it when a simple .length test is sufficient. Anyway, Hamish's .exists() function does seem like the best of both worlds. A couple of little improvements: It doesn't need to be defined inside a $(document).ready(), and as long as we're encapsulating the logic anyway, it's better to use the more efficient .length>0 test. So, the code would be: jQuery.fn.exists = function() { return this.length > 0; }; There are some situations where you could use .exists() or .is('*') or .length>0 but there is a better alternative. One case would be where you want to access a DOM property directly, so you need to know that the element actually exists before you do that: if( $('#id').exists() ) alert( $('#id')[0].tagName ); It would be much better to write it this way: var element = $('#id')[0]; if( element ) alert( element.tagName ); -Mike > From: McLars > > Hamish, I like that! > > Michael, the question is number two on the FAQ. Despite what > seasoned programmers may think, it's obviously not intuitive > to newbies. > > > Personally, I think it's always good to point out > alternatives to learners. The .is() method is actually quite > versatile and can be used to test for more than just > existence. It doesn't hurt to keep an open mind and look at > all the alternatives--even for something as simple as > checking existence. I didn't even know about the .is() method before. > I looked in the docs, tried it out, and actually learned something. > > Larry > > > On Dec 26, 3:08 pm, Hamish Campbell <[EMAIL PROTECTED]> wrote: > > extendify! > > > > $(document).ready(function() { > > jQuery.fn.exists = function() { > > return ( this.is('*') ) > > } > > } > > > > }); > > > > On Dec 27, 10:28 am, "Michael Geary" <[EMAIL PROTECTED]> wrote: > > > > > > > > > It's funny, if I saw: > > > > > if( $('#id').is('*') ) { ... } > > > > > I would have no clue what the code was trying to do until > I thought > > > hard about it: "Let's see... is star... Now that's going > to match *anything*. > > > Wouldn't it always return true? Naw, that can't be right, > what would > > > be the point of this code... Oh! What if there are no elements at > > > all? Then it would return false! I think it would anyway. > Better check the docs. Hmm... > > > The docs don't explicitly say what .is() does when the > array is empty. > > > Better check the source code, and maybe try a couple of > test cases > > > to be sure." > > > > > Where if I saw: > > > > > if( $('#id').length ) { ... } > > > > > I would know right away what it does: "$() returns an > array. Does it > > > have any elements?" :-) > > > > > -Mike > > > > > > From: McLars > > > > > > $('#id').length is the old school, and most widely > used, technique. > > > > This is probably the fastest. > > > > > > $('#id').is('*') does make sense semantically (expresses the > > > > intent), and is more flexible. > > > > > From: Alexey Blinov > > > > > > > Yep... my code have size(). Forgot to point it... > > > > > And thanks for info about more efficient way - using length. > > > > > So... which way is better than? > > > > > > > 1. $('#id').length > 0 > > > > > > > 2. $('#id').length() !== 0 > > > > > > > 3. $('#id').is('*') //never try it... but look pretty- Hide > > > > > quoted text - > > > > > - Show quoted text -- Hide quoted text - > > > > - Show quoted text - >