> > I've been hacking with jQuery on and off lately and I've 
> > now hit the annoying problem of not being able to access
> > simple DOM 0 properties unless, apparently, using either
> > of the following syntaxes:
> >
> > $('#foo')[0]

>    Will throw error if there is no match, IIRC.

No, it won't. It is not an error to fetch a nonexistent array element. It
returns undefined.

You could even do $('#foo')[12345] and it wouldn't throw an error.

Of course, if there is no element with id 'foo', this will throw an error:

   $('#foo')[0].whatever

Because $('#foo')[0] returned undefined, so you are trying to access the
'whatever' property of... undefined.

It's just as if you had done:

   var array = [];
   var element = array[0];  // not an error
   var element1 = array[1];  // also not an error
   // element and element1 have a value of undefined, so...
   alert( element );  // alerts "undefined"
   alert( element.test );  // throws an error

But you can do this:

   var element = $('#foo')[0];
   if( element ) {
      // now you know that element exists
      // and can access its properties
   }

> Use $('#foo:nth(0)') instead. For just first match, you could use $
> ('#foo:first')

That will still return an array (if it works), leaving you in the same boat
as before.

-Mike

Reply via email to