I hate to say this but i'm using IE6 for compatibility testing because
that (like it or not) is still our organisation's standard
browser... :-}

On May 25, 2:03 pm, Jason Persampieri <papp...@gmail.com> wrote:
> re: this vs $(this) -
> this = DOMNode
> $(this) = [DOMNode] (ie, an array containing the single element,
> DOMNode) that also happens to have lots of nifty methods like
> 'children', 'find' and 'animate'.
>
> The jQuery version should work in pretty much all browsers though...
> the compatibility layer is built-in.
>
> Oh, and if you aren't, use IE8 for IE debugging.  It's nowhere near as
> nice as FF+Firebug, but it's a lot better than IE7.
>
> Also,http://api.jquery.comis a very handy reference tool :)
>
> _jason
>
> PS.  Another couple of ways to get what you want -
> /* get all direct children of this that are <a>'s, then filter out all
> remaning, but leave first children */
> $(this).children('a').filter(":first-child")
> /* get all direct children of this, grab just the first one, then
> filter out all remaining, but leave <a>'s */
> $(this).children().eq(0).filter("a")
>
> On May 25, 5:44 am, colin_e <colin.ev...@nhs.net> wrote:
>
> > That is very, very helpful, thanks!
>
> > I knew I hadn't found the correct way to say "constrain the search to
> > children of 'this', now I know.
>
> > To be honest I think i'm still unclear on the real difference between
> > the vanilla Javascript 'this' and the jquery '$(this)'. For example I
> > think that I could have got the selection I wanted with Javascript
> > like-
>
> > this.firstChild.className
>
> > ...but I also know firstChild doesn't work in IE. I was hoping the
> > jquery version would help solve that, but at the moment I still have a
> > solution that works only in Firefox :-}   At the moment I don't have
> > an IE quivalent to Firebug so i'm slightly stuck on how to try to
> > debug it.
>
> > Anyway, in Firefox it works like a charm. Thanks for the help, much
> > appreciated!
>
> > Regards: colin_e
>
> > On May 25, 11:44 am, Jason Persampieri <papp...@gmail.com> wrote:
>
> > > Certainly... you're really not all that far off at all... let me just
> > > point out a couple of things.
>
> > > 1) It's ":first-child", not ":first".
>
> > > 2) inside the loop, the variable - this - is a reference to the DOM
> > > <li> node.  Hence, to get the jQuery object for that node, use $(this)
> > > (note the lack of quotes).  Although I guess it's possible $("this")
> > > may 'do the right thing' since there's no HTML Tag named "this".
>
> > > 3) There is no 3.
>
> > > 4) a:first-child says find every <a> that happens to be the first-
> > > child of its parent, *not* find the first child <a> of my current
> > > context.  Is that clear?  Here's an example.
>
> > > <div id='foo'>
> > >   <p><a id='bar'>I am the first-child of 'p'.</a></p>
> > >   <a id='baz'>I am not the first-child and hence will always live in
> > > the shadow of my older brother, 'p'.  Someday he'll pay.</a>
> > > </div>
>
> > > $("#foo a:first-child") => ['#bar']
>
> > > 5) Putting it all together, you still need some way to say, "find
> > > <a>'s under my current <li>", here you have a few choices...
>
> > > a) $("a:first-child", this) => find all <a>s that are *any* descendant
> > > of "this" that also happen to be a "first-child".  Note that the
> > > second parameter passed in to the '$' function is the context to
> > > search within.
>
> > > b) $(this).find("a:first-child") => same as a) but I happen to find
> > > this syntax cleaner.
>
> > > c) $(this).children("a:first-child") => finds all <a>s that are
> > > *direct* children of "this" and are also the "first-child".  Astute
> > > members of our audience will note this can only ever correspond to at
> > > most one <a> per <li>.  I think this is the one you are looking for.
>
> > > Hope this helps!
>
> > > _jason
>
> > > On May 24, 1:12 pm, colin_e <colin.ev...@nhs.net> wrote:
>
> > > > Hi. I'm very new to jquery, and a lightweight coder, so apologies for
> > > > the newbie question.
>
> > > > I think I understand the "implied loop" declarative nature of jquery
> > > > selectors, that say (sort-of) "for everything matching the selector
> > > > do"{ <some stuff> }
>
> > > > What i'm struggling to get my head around is how this works inside a
> > > > function once you HAVE a "this" object?
>
> > > > Example:
> > > > I have a list of the form-
>
> > > > <ul id="map">
> > > >   <li><a class='EM' href='#' title='East Midlands'><span>East
> > > > Midlands</span></a></li>
> > > >   <li><a class='NE' href="#" title='North East'><span>North East</
> > > > span></a></li>
> > > > </ul>
>
> > > > This inside my document.ready I have a function like this-
>
> > > >         $('#map li').hover(
> > > >                 function(){
> > > >                         region= $('this a:first').attr('class');  // 
> > > > Tries to find the
> > > > class of the first <a> in <li>
> > > >                                                                         
> > > >   //
> > > > but always returns undefined??
> > > >                         do_something_with_the_region();
> > > >                 },
> > > >                 function(){
> > > >                         undo_something_with_the_region();
> > > >                 }
> > > >         );
>
> > > > The piece that says "region= $('this a:first').attr('class');" is my
> > > > (clearly incorrect) attempt at the incantation to say  "Give the
> > > > current object (an <il>), return the class attribute of the first
> > > > anchor that is a child of the current item".
>
> > > > I suspect I haven't got the right idea at all, can anyone point me in
> > > > the right direction?
>
> > > > Regards: colin_e

Reply via email to