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