jquery选择前一个元素匹配选择器的每个元素

时间:2013-11-26 15:28:46

标签: javascript jquery

我有以下问题,而且我已经挣扎了很长一段时间。我确定解决方案很简单,但我仍然无法看到它。 在下面的一组行中,我只想选择包含.replace或.empty或.delete或.insert类的行,并且前面是包含类.equal的行:

<tr>
    <th>sth</th>
    <td class="equal"> sth</td>
    <th>sth</th>
    <td class="equal"> sth</td>
</tr>
<tr>
    <th>sth</th>
    <td class="equal"></td>
    <th>sth</th>
    <td class="equal"></td>
</tr>
<tr>
    <th>want to be 1st selected row</th>
    <td class="replace"></td>
    <th></th>
    <td class="replace"> </td>
</tr>
<tr>
    <th>dont want this one but it selects it</th>
    <td class="replace"></td>
    <th>sth</th>
    <td class="replace"> sth</td>
</tr>
<tr>
    <th>sth</th>
    <td class="equal"></td>
    <th>sth</th>
    <td class="equal"></td>
</tr>
<tr>
    <th>want to be 2nd selected row</th>
    <td class="delete"></td>
    <th></th>
    <td class="delete"> </td>
</tr>
<tr>
    <th>sth</th>
    <td class="replace"></td>
    <th>sth</th>
    <td class="replace"> sth</td>
</tr>

所以我把它作为一个jQuery(“prev + next”)选择器来提出,但它似乎没有工作,因为它只选择我想要的第一行,然后是其他所有其他包含.replace并且只在跳转之后到下一个.replace前面的.requal:

$('tr:has(.equal) + tr:has(.replace),tr:has(.empty),tr:has(.delete),tr:has(.insert)')

2 个答案:

答案 0 :(得分:2)

这稍微有点效率,但更啰嗦:

$("tr:has(.equal)").next("tr:has(.empty), tr:has(.insert), tr:has(.delete), tr:has(.replace)")

FiddlejsPerf

答案 1 :(得分:1)

选择以前的元素,然后使用.next

$(".equal").closest("tr").next().has(".replace,.empty,.delete,.insert");

它只选择具有指定类的表行,并且前面是包含equal类的行。