I need to extract the details of each column in my table. For example, column "Name/Nr.".
- The table contains a number of addresses
- The very last column of each row has a button that lets a user choose a listed address.
Problem: My code only picks up the first <td>
that has a class nr
. How do I get this to work?
Here's the jQuery bit:
$(".use-address").click(function() {
var id = $("#choose-address-table").find(".nr:first").text();
$("#resultas").append(id); // Testing: append the contents of the td to a div
});
Table:
<table id="choose-address-table" class="ui-widget ui-widget-content">
<thead>
<tr class="ui-widget-header ">
<th>Name/Nr.</th>
<th>Street</th>
<th>Town</th>
<th>Postcode</th>
<th>Country</th>
<th>Options</th>
</tr>
</thead>
<tbody>
<tr>
<td class="nr"><span>50</span>
</td>
<td>Some Street 1</td>
<td>Leeds</td>
<td>L0 0XX</td>
<td>United Kingdom</td>
<td>
<button type="button" class="use-address" />
</td>
</tr>
<tr>
<td class="nr">49</td>
<td>Some Street 2</td>
<td>Lancaster</td>
<td>L0 0XX</td>
<td>United Kingdom</td>
<td>
<button type="button" class="use-address" />
</td>
</tr>
</tbody>
</table>
Here is the complete code for simple example of delegate
The selector
".nr:first"
is specifically looking for the first, and only the first, element having class"nr"
within the selected table element. If you instead call.find(".nr")
you will get all of the elements within the table having class"nr"
. Once you have all of those elements, you could use the .each method to iterate over them. For example:However, that would get you all of the
td.nr
elements in the table, not just the one in the row that was clicked. To further limit your selection to the row containing the clicked button, use the .closest method, like so:Find element with id in row using jquery
The object of the exercise is to find the row that contains the information. When we get there, we can easily extract the required information.
Answer
VIEW DEMO
Now let's focus on some frequently asked questions in such situations.
How to find the closest row?
Using
.closest()
:Using
.parent()
:You can also move up the DOM tree using
.parent()
method. This is just an alternative that is sometimes used together with.prev()
and.next()
.Getting all table cell
<td>
valuesSo we have our
$row
and we would like to output table cell text:VIEW DEMO
Getting a specific
<td>
valueSimilar to the previous one, however we can specify the index of the child
<td>
element.VIEW DEMO
Useful methods
.closest()
- get the first element that matches the selector.parent()
- get the parent of each element in the current set of matched elements.parents()
- get the ancestors of each element in the current set of matched elements.children()
- get the children of each element in the set of matched elements.siblings()
- get the siblings of each element in the set of matched elements.find()
- get the descendants of each element in the current set of matched elements.next()
- get the immediately following sibling of each element in the set of matched elements.prev()
- get the immediately preceding sibling of each element in the set of matched elementsthen on your button:
You need to change your code to find the row relative to the button which was clicked. Try this:
Example fiddle