ryonlife
ryonlife

Reputation: 6643

jQuery selection: traversing up, then back down

I am struggling with how to select a particular element with jQuery. Conditions outlined here:

So far, I am using this to select the correct parent element:

$(this).parents('td')

I don't know how to traverse back down the DOM tree to get the final span inside of the selected td. Thanks!

Edit

Per my comments below, would also be nice to select from a span or div, whichever is last.

Upvotes: 6

Views: 8895

Answers (3)

Marc W
Marc W

Reputation: 19251

$(this).parents('td').children('span:last');

should do the trick.

Edit

I didn't notice your desire to not only deal with immediate children. If you want all decendants, then you would use

$(this).parents('td').find('span:last')

I had assumed the span would always be a child of the td.

Final Edit

For posterity's sake (and to make it easier for people to find this answer in the future), since this was already accepted as the answer, Ben came up with a more elegant solution in his answer that I'm going to put here:

$(this).closest('td').find('div,span').filter(':last')

As Ben said, you must be using JQuery 1.3 for closest() to work. Good work! :-)

Upvotes: 13

Ben Blank
Ben Blank

Reputation: 56624

The function you're looking for is find(expr), which searches all descendant nodes:

$(this).closest('td').find('span:last')

Edit: To select the last div or span:

$(this).closest('td').find('div,span').filter(':last')

Edit 2: Mark makes an excellent point about using closest() instead of parents(), but be aware that you need to be using jQuery 1.3 for it.

Upvotes: 4

Mark
Mark

Reputation: 10206

I prefer to use closest in this case, instead parents. You don't have to worry about there being two or more 'td' elements in the ancestry.

$(this).closest('td').children("span:last")

Upvotes: 5

Related Questions