This is insanely kludgy, not very pretty, and probably slower than a
more elegant solution.

But it works.

        $('*').hover(
                function(event) {
                        var $this = $(this);
                        $this.addClass('selected');
                        $this.parents( ).removeClass('selected');
                },
                function(event) {
                        var $this = $(this);
                        $this.removeClass('selected');
                        $this.parents( ).removeClass('selected');
                        $this.parent( ).addClass('selected');
                        $this.children( ).removeClass('selected');
                }
        );

I'm sure there are better solutions out there, but this was the
fastest and easiest method.

On Sep 17, 2:04 am, Balazs Endresz <[EMAIL PROTECTED]> wrote:
> I'm not sure I get it, but if you want to grab the <strong> inside a
> <p> when the event is only bound to <p> then you can get it simply by
> event.target:
>
> $('body').find('*').filter(function(){
>   return !$(this).children().length;})
>
> .add('p').not('p *')
> .hover(function(event){
>
>     var t=event.target  //this will be the strong tag inside the <p>
>
>     if ($(this).children().length() > 0) {
>        return False
>     }
>
>     $(this).addClass('selected');
>   },
>   function(){
>      $(this).removeClass('selected');
>   }
> );
>
> You can also try this with event delegation, which will be much faster
> with a lot of 
> elements:http://dev.distilldesign.com/log/2008/jan/27/event-delegation-jquery/http://lab.distilldesign.com/event-delegation/
>
> On Sep 16, 7:17 pm, John Boxall <[EMAIL PROTECTED]> wrote:
>
> > Hi Balazs,
>
> > Thanks for the reply - looking at your suggestion, my idea was to
> > apply it to the code like this:
>
> > $(function() {
> >         $("*").hover(
> >            function(){
>
> >                 // If the element has more than one child stop
> > propagating.
> >                 if ($(this).children().length() > 0) {
> >                     return False
> >                 }
>
> >                 $(this).addClass('selected');
> >             },
> >             function(){
> >                 $(this).removeClass('selected');
> >             }
> >         );
>
> > }
>
> > This is _close_ to what I want, but what I'd really like is to grab
> > DOM element you are hovering over with the minimum number of children
> > - not necessarily zero.
>
> > It's my understanding that with the above, if you hovered over a <p>
> > with a <strong> inside you couldn't select the <p> because it would
> > have a child!
>
> > Thanks,
>
> > John
>
> > Should only return true if the selected $(this) has no children.
> > This is _close_ to what I want - but what I'd really like is to grab
> > the element
>
> > On Sep 14, 4:10 am, Balazs Endresz <[EMAIL PROTECTED]> wrote:
>
> > > Hey John,
>
> > > I think this will do that:
>
> > > $('body').find('*').filter(function(){
> > >   return !$(this).children().length;})
>
> > > .add('p').not('p *') //without this, if a paragraph contains tags 
> > > thehoverwon't be applied to the most of the text
>
> > > On Sep 12, 9:29 pm, John Boxall <[EMAIL PROTECTED]> wrote:
>
> > > > Heyo jQuery hackers,
>
> > > > I'm putting together a little script that adds a class "selected" to
> > > > an element when youhoverover it.
> > > > When you stop hovering the class "selected" class is removed.
>
> > > > I would like the class only to be apply to the lowest element in the
> > > > DOM.
>
> > > > For example say I was hovering over a <p> deep inside a document - I
> > > > would like to only add the class "selected" to that <p> tag, not the
> > > > <div>, <body> and <html> tags surrounding it.
>
> > > > So far my thinking has been to use something like this:
>
> > > > $(function() {
> > > >         $("*").hover(
> > > >            function(){
> > > >                 $(this).addClass('selected');
> > > >             },
> > > >             function(){
> > > >                 $(this).removeClass('selected');
> > > >             }
> > > >         );
>
> > > > }
>
> > > > Which adds the "selected" class to any element Ihoverover fine. It
> > > > also removes it.
>
> > > > The problem is thehoveris firing all the way up the chain and
> > > > hitting all elements from the lowest to the highest so I've got a ton
> > > > of ugly selected elements when I really just wanted the lowest one...
>
> > > > Is there any way I can restrict it?
>
> > > > Thanks,
>
> > > > John

Reply via email to