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