I have some HTML code that looks like this:
<tr id="nbContent_GR1">...</tr>
<tr id="nbContent_GR2">...</tr>
<tr id="nbContent_GR3">...</tr>
<tr id="nbContent_GR4">...</tr>
<tr id="nbContent_GR5">...</tr>
<tr id="nbContent_GR6">...</tr>
Within one of the rows, I want to traverse up the DOM to find the closest element that has an ID attribute that starts with "nbContent_GR". So basically I want to be able to find the parent TR element without knowing its exact ID, just the first one that starts with "nbContent_GR". Is this possible? If so, how would I go about it?
BTW, I'm aware of the closest() and "contains" selectors, just not sure if contains can be used on attribute values or not.
Answer: Use the CSS Attribute Selector You can use the CSS attribute selectors to find an HTML element based on its data-attribute value using jQuery. The attribute selectors provide a very powerful way to select elements.
$ is another, which is just an alias to jQuery . $$ is not provided by jQuery. It's provided by other libraries, such as Mootools or Prototype.
To retrieve a data-* attribute value as an unconverted string, use the attr() method. Since jQuery 1.6, dashes in data-* attribute names have been processed in alignment with the HTML dataset API.
The closest() method returns the first ancestor of the selected element. An ancestor is a parent, grandparent, great-grandparent, and so on. The DOM tree: This method traverse upwards from the current element, all the way up to the document's root element (<html>), to find the first ancestor of DOM elements.
Just do:
tr = $(this).closest("[id^='nbContent_GR']");
that will traverse the DOM up until it finds a parent with ID starting with 'nbContent_GR'
.closest('[id^="nbContent_GR"]')
Two useful pages to look at:
http://api.jquery.com/closest/
http://api.jquery.com/attribute-starts-with-selector/
I think you can combine these for a solution.
From within the TR, find the closest TR. Then use the 'starts with' selector to find an ID which starts with your required value.
E.g.:
$(this).closest("tr").parent().find("id^='nbContent_GR'");
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With