> From: ldexterldesign
> 
> regarding your second point about using classes instead of 
> IDs in my XHTML, i agree, but i am under the impression that 
> warranting the use of classes on elements should only occur 
> if you plan to re-use the object, otherwise ID it - i stand 
> by this ethos, but i'm not as adept with JQ as you right now, 
> so things may change. i am aware of ID overuse though and try 
> to use as few as possible. is there some sort of speed issue 
> with how JQ handles IDs as opposed to classes then?

Not at all, in fact just the opposite: In typical documents, $('#myid') can be 
*much* faster than $('.myclass').

I think Glen was advocating the flexibility of classes, such as the way they 
allow you to select multiple elements in a convenient
way and call a jQuery method on all of them simultaneously. Selecting by class 
can also help you write more reusable code.

But if you know you're dealing with a single element, by all means use an ID 
for speed.

One interesting code design point related to this: How do you access the 
underlying DOM element(s) for a jQuery object? Normally,
you use .each() and a callback function. But when you use an ID selector, it's 
perfectly reasonable to use [0].

For example, this code *must* use .each() - or an equivalent for loop - because 
it has no way of knowing how many elements match the
selector:

   function test( selector ) {
      $(selector).each( function() {
         // do something with each DOM element
      });
   }

Similarly, a more hard-coded version must also use .each(), because there may 
be more than one element matching '.myclass:

   $('.myclass').each( function() {
      // do something with each DOM element
   });

But if I saw this code, a mental alarm would go off (what if there is more than 
one match?):

   $('.myclass')[0].someDomMethod();

However, this code is perfectly reasonable (unless you need to handle the case 
where the #myid element does not exist on the page):

   $('#myid')[0].someDomMethod();

-Mike

Reply via email to