jQuery在tr标题后面加上tr



我有下面的HTML表。

<table id="table">
<tbody>
<tr>
<th>City</th>
</tr>
<tr>
<td>Madrid</td>
</tr>
<tr class="show-on-top">
<td data-order="3">London</td>
</tr>
<tr>
<td>Berlin</td>
</tr>
<tr>
<td data-order="1">Paris</td>
</tr>
<tr class="show-on-top">
<td data-order="2">Rome</td>
</tr>
</tbody>

伦敦、巴黎和罗马有一个名为show-on-top的班级。顾名思义,我想将所有trshow-on-top一起移动到表的顶部。我可以用下面的代码做到这一点。

$("#table tbody").prepend($('.show-on-top'));

但问题是,伦敦、巴黎和罗马显示在<th>("城市"标题(之前。当然,我想把show-on-top行放在表的顶部,但放在标题(第一行(之后。所以我想出了以下的主意。

$("#table tbody tr:eq(1)").prepend($('.show-on-top'));

我快到了。我所有的show-on-top都放在标题后面,但它们嵌套在tr中,如下所示。

<table id="table">
<tbody>
<tr>
<th>City</th>
</tr>
<tr>
<tr class="show-on-top">
<td data-order="3">London</td>
</tr>
<tr>
<td data-order="1">Paris</td>
</tr>
<tr class="show-on-top">
<td data-order="2">Rome</td>
</tr>
</tr>
<tr>
<td>Madrid</td>
</tr>
<tr>
<td>Berlin</td>
</tr>
</tbody>

我不明白我的所有行是如何嵌套在tr中的。我尝试了数百种parentafterprependappend的组合,但都没有成功。

奖金问题show-on-top行具有data-order属性,该属性表示我希望对所讨论的行(巴黎>罗马>伦敦(进行排序的顺序。我使用了sort.data('order'),但什么也没发生。我甚至在console.log()中看不到任何东西。

谢谢你抽出时间。

您可以做的一件事是将标题行从<tbody>移到<thead>

$("#table tbody").prepend($('.show-on-top'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<table id="table">
<thead>
<tr>
<th>City</th>
</tr>
</thead>
<tbody>
<tr>
<td>Madrid</td>
</tr>
<tr class="show-on-top">
<td data-order="3">London</td>
</tr>
<tr>
<td>Berlin</td>
</tr>
<tr>
<td data-order="1">Paris</td>
</tr>
<tr class="show-on-top">
<td data-order="2">Rome</td>
</tr>
</tbody>
</table>

另一种解决方案是使用.after()将行放在包含th的最后一行之后。

$("#table tbody tr:has(th):last").after($(".show-on-top"));
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<table id="table">
<tbody>
<tr>
<th>City</th>
</tr>
<tr>
<td>Madrid</td>
</tr>
<tr class="show-on-top">
<td data-order="3">London</td>
</tr>
<tr>
<td>Berlin</td>
</tr>
<tr>
<td data-order="1">Paris</td>
</tr>
<tr class="show-on-top">
<td data-order="2">Rome</td>
</tr>
</tbody>
</table>

您可以使用insertAfter():first选择器

$(".show-on-top").insertAfter('#table tbody tr:first');
.show-on-top{ color:red}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<table id="table">
<tbody>
<tr>
<th>City</th>
</tr>
<tr>
<td>Madrid</td>
</tr>
<tr class="show-on-top">
<td data-order="3">London</td>
</tr>
<tr>
<td>Berlin</td>
</tr>
<tr>
<td data-order="1">Paris</td>
</tr>
<tr class="show-on-top">
<td data-order="2">Rome</td>
</tr>
</tbody>
</table>

相关内容

  • 没有找到相关文章

最新更新