簡體   English   中英

jQuery選擇前一個元素與選擇器匹配的每個元素

[英]jquery select each element who's previous element matches selector

我有以下問題,並且我已經為此苦苦掙扎了一段時間。 我確定解決方案非常簡單,但我仍然看不到它。 在下面的行集中,我只想選擇包含.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之前是.equal:

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

這效率更高一些,但是更加麻煩:

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

小提琴jsPerf

選擇前面的元素,然后使用.next

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

它僅選擇具有指定類並在其前面包含equal類的行的表行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM