使用jQuery获得作为孩子的第一个N.

时间:2015-10-30 06:38:33

标签: javascript jquery html

我有<table>有行,第一行是当然标题,其他10行是非标题行。我希望得到前3个非标题行(只有td孩子而不是th

<table>
    <tr>
        <th> Header 1 </th>
        <th> Header 2 </th>
        <th> Header 3 </th>
    </tr>
    <tr>
        <td> Row 1 Cell 1 </td>
        <td> Row 1 Cell 2 </td>
        <td> Row 1 Cell 3 </td>
    </tr>
    <tr>
        <td> Row 2 Cell 1 </td>
        <td> Row 2 Cell 2 </td>
        <td> Row 2 Cell 3 </td>
    </tr>
</table>

我正在使用JQuery

var sideNotification = jq(jq.parseXML(response.d))
    .find('tr').has("td")
    .each(function (index) {
        if (index < 3) {
            return {
                leadNo: $(this).find("td:eq(0)").text(),
                product: $(this).find("td:eq(1)").text(),
                status: $(this).find("td:eq(2)").text()
            }
        }
    });
console.log(sideNotification.length);

但它仍然以10计数。怎么解决?

2 个答案:

答案 0 :(得分:2)

您可以使用:has:lt选择器的组合。

$('tr:has(td):lt(3)').css('color', 'red');
   ^^^^^^^^^^^^^^^
   ^^               tr       -->  Select all tr elements
     ^^^^^^^        :has(td) -->  Select all tr elements having `td` as descendent
             ^^^^^  :lt(3)   -->  Get first three elements

&#13;
&#13;
$('tr:has(td):lt(3)').css('color', 'red');
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.0/jquery.min.js"></script>
<table>
  <tr>
    <th>Header 1</th>
    <th>Header 2</th>
    <th>Header 3</th>
  </tr>
  <tr>
    <td>Row 1 Cell 1</td>
    <td>Row 1 Cell 2</td>
    <td>Row 1 Cell 3</td>
  </tr>
  <tr>
    <td>Row 2 Cell 1</td>
    <td>Row 2 Cell 2</td>
    <td>Row 2 Cell 3</td>
  </tr>
  <tr>
    <td>Row 1 Cell 1</td>
    <td>Row 1 Cell 2</td>
    <td>Row 1 Cell 3</td>
  </tr>
  <tr>
    <td>Row 2 Cell 1</td>
    <td>Row 2 Cell 2</td>
    <td>Row 2 Cell 3</td>
  </tr>
  <tr>
    <td>Row 1 Cell 1</td>
    <td>Row 1 Cell 2</td>
    <td>Row 1 Cell 3</td>
  </tr>
  <tr>
    <td>Row 2 Cell 1</td>
    <td>Row 2 Cell 2</td>
    <td>Row 2 Cell 3</td>
  </tr>
</table>
&#13;
&#13;
&#13;

答案 1 :(得分:0)

你可以这样使用

$("tr:lt(4)").filter(function () {
   return $(this).find("td").length > 0;
})
  1. :lt(4)将获取索引小于4的所有tr元素。
  2. 然后,您可以通过检查每个tr中td的计数来消除标题。
  3. Fiddle