How To Select First Ancestor That Matches A Selector?
General:
How can I select the first matching ancestor of an element in jQuery?
Example:
Take this HTML block
<table>
<tbody>
<tr>
<td>
<a href="#" class="remove">Remove</a>
</td>
</tr>
<tr>
<td>
开发者_JAVA百科 <a href="#" class="remove">Remove</a>
</td>
</tr>
</tbody>
</table>
I can remove a row in the table by clicking "Remove" using this jQuery code:
$('.remove').click(function(){
$(this).parent().parent().hide();
return false;
});
This works, but it's pretty fragile. If someone puts the <a>
into a <div>
, for example, it would break. Is there a selector syntax in jQuery that follows this logic:
"Here's an element, now find the closest ancestor that matches some selection criteria and return it"
Thanks
That would be closest
:
$(this).closest('tr').hide();
I prefer using closest
as @Kobi points out (+1) as it seems to be the most concise way to do that. Just to point out, you can also use parents
:
$(this).parents("tr:first")
You can pass a selector to the parent argument I believe.
$('.remove').click(function(){
$(this).parents("tr:first").hide();
return false;
});
Or you can use closest as indicated by another answer.
$('.remove').click(function(){
$(this).closest("tr").hide();
return false;
});
Assuming you're using jQuery 1.4, you can use .parentsUntil() which will return all of the ancestors upto but NOT including the selected ancestor.
So in your case I would go with something like this:
$('.remove').click(function(){
$(this).parentsUntil("tr").parent().hide();
return false;
});
精彩评论