I have a scenario where I would like to select rows from a table depending upon the values in td
e.g. I have a table like this
<tr>
<td>John</td>
<td>Smith</td>
<td>Male</td>
</tr>
<tr>
<td>Andy</td>
<td>Gates</td>
<td>Male</td>
</tr>
<tr>
<td>Alice</td>
<td>Nixon</td>
<td>Female</td>
</tr>
now I would like to select all the rows if the value of first td is x AND value of second td is y
At the momemnt I am doing something like this
$("tr").each(function (index) {
if ($(this).find('td:eq(0)').text().trim() == x &&
$(this).find('td:eq(1)').text().trim() == y)
...do somethin....
});
looping through each row and check. This is verbose. Is there a better way to achieve this in a single line. I can't seem to figure out AND operator logic with selectors?
Awaiting,
Alternatively, using
.filter
:Demo: http://jsfiddle.net/WhFbE/5/
Here's a selector that should work:
Try it out: http://jsfiddle.net/N6TdM/
Note that this could fail if you have something like the following:
Searching for "Rob Roberts" would give two matches.
You can use the native DOM
cells
property on the HTMLTableRowElement to access the cells directly, rather than sending jQuery on a roundabout trip with listing all descendant cells and picking out one with the non-standard:eq
selector.though it probably won't make a serious performance difference. Another approach would be simply to maintain an array-of-arrays containing the pre-trimmed data to save even looking at the DOM.