<ul><li><div><div><span id="thisid"></span></div></div></li></ul>
$('#thisid').parent('li');
that obviously doesn't work, but how do I grab the li element? I don't want to use:
$('#this').parent().parent().parent();
I don't want to use it, because it can happen that there is just one div element, instead of two. In this case I would grab the ul element instead of the li element.
$('#thisid').parents('li');
// ^ plural!
Note that if you only want the first <li>
element in the ancestry, you should use closest()
:
$('#thisid').closest('li');
// `closest()` is equivalent to (but performs better than)
$('#thisid').parents('li').eq(0);
$('#thisid').parents('li').first();
- http://api.jquery.com/closest/
- http://api.jquery.com/parents/
$('#thisid').parents('li')
or if you only want the first one:
$('#thisid').closest('li')
Simple, use parents()
var parents = $("#thisid").parents('li');
$('#thisid').parents( 'li:eq(0)' );
Should do it. This will give you the first (:eq(0)
) parent that matches being the tag you're searching for.
$('li').has('#thisid')
http://api.jquery.com/has/
I prefer the 'closest' than 'parents'.
Parents travel up the DOM tree to the document's root element, adding each ancestor element to a temporary collection; it then filters that collection based on a selector if one is supplied.
where
Closest Travel up the DOM tree until it finds a match for the supplied selector.
Most important what they give in result:
Praents: Returned jQuery object contains zero or more elements for each element in the original set, in reverse document order.
Closest: Returned jQuery object contains zero or one element for each element in the original set, in document order
$('#thisid').closest('li');
Follow this Link
You may actually want to use $("#thisid").closest('li')
. This traverses up the DOM tree from the selected node and returns the first matching ancestor whereas the .parents()
travels from the parent node and returns all ancestor nodes matching that filter. See here for more information.