javascript - 使用按钮更改表格行顺序并非每次都有效
问题描述
我有一个表,<tr>
每个项目有 2 个,.project-row
& .expandable-row
。我正在尝试使用中的向上/向下按钮更改这些项目的顺序.project-row
,我开始工作了,但不是 100% 的时间:
例如:当我单击项目 1 时,它会按预期向下移动,但是当我再次尝试将其向下移动时,我必须单击它两次才能真正移动。
为什么?
解决方案
问题是因为您对错误行的链式使用next()
和prev()
定位 - 它进入目标组的中间而不是之前/之后。
您可以通过组合移动内容并根据某些数据属性更改其行为的事件处理程序来解决此问题并使逻辑更简单。尝试这个:
jQuery(function($) {
$(document).on('click', '.order-change', function() {
$('.expandable-row').hide();
var $trigger = $(this)
var $row = $trigger.closest('tr');
var $infoRow = $row.next('tr');
if ($trigger.data('dir') === 'up') {
$row.add($infoRow).insertBefore($row.prev());
} else {
$row.add($infoRow).insertAfter($infoRow.next());
}
});
});
td {
border: 1px solid black;
text-align: center;
}
td div {
cursor: pointer;
}
.expandable-row {
display: none;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<table>
<tbody>
<tr class="project-row" data-project-id="0">
<td>
<div class="order-change" data-dir="up">up</div>
<div class="order-change" data-dir="down">down</div>
</td>
<td>Project 1</td>
</tr>
<tr class="expandable-row" data-project-id="0">
<td>Project 1 info</td>
</tr>
<tr class="project-row" data-project-id="1">
<td>
<div class="order-change" data-dir="up">up</div>
<div class="order-change" data-dir="down">down</div>
</td>
<td>Project 2</td>
</tr>
<tr class="expandable-row" data-project-id="1">
<td>Project 2 info</td>
</tr>
<tr class="project-row" data-project-id="2">
<td>
<div class="order-change" data-dir="up">up</div>
<div class="order-change" data-dir="down">down</div>
</td>
<td>Project 3</td>
</tr>
<tr class="expandable-row" data-project-id="2">
<td>Project 3 info</td>
</tr>
</tbody>
</table>
推荐阅读
- bigdata - Apache Ignite:数据区域内存不足 [name=Default_Region,initSize=256.0 MiB,maxSize=68.0 GiB,persistenceEnabled=false]
- javascript - 访问 json React Native 中的嵌套值
- python - 如何将此代码转换为python列表理解?
- image - imagick:返回图像中圆形对象的位置和大小
- selenium - 为什么在命令提示符下使用 vstest.console.exe 运行 SpecFlow-Selenium 测试时不加载 css 和 js 文件?
- c# - 错误:无法建立连接,因为目标机器主动拒绝它
- z3 - 将 `str.indexof` 与 `int2bv` 一起使用时性能不佳
- scala - 在scala中仅从Epochtime中提取小时
- amazon-web-services - t3.2xlarge 的 1 个 EC2 实例的流量处理能力
- nameerror - 如何在 jupiternote 书中解决以后创建 NameError 的警告?