我正在研究jQuery datatable插件。单击向下箭头时,交换当前行和下一行。单击向上箭头时,交换当前行和上一行。但我无法获得特定点击行的索引。
$(document).ready(function() {
var table = $('#example').DataTable();
$('#example tbody').on('click', '.swapDown', function(event){
var ind = table.row(this.closest("tr")).index();
var movedData = table.row(this.closest("tr")).data(),
otherData =table.row(this.closest("tr").prev()).data();
table.row(this.closest("tr").prev()).data(otherData).draw();
table.row(this.closest("tr")).data(movedData).draw();
console.log(ind);
});
$('#example tbody').on('click', '.swapUp', function(event){
var ind = table.row(this.closest("tr")).index();
var movedData = table.row(this.closest("tr")).data(),
otherData =table.row(this.closest("tr").next()).data();
table.row(this.closest("tr").next()).data(otherData).draw();
table.row(this.closest("tr")).data(movedData).draw();
console.log(ind);
});
});
答案 0 :(得分:0)
我从未使用过此插件,但@annoyingmouse是对的。您可能打算使用$(this)
而不是this
,因为前者创建了一个jQuery对象,您可以在其中使用jQuery方法。我注意到的另一件事是包含的DataTables插件不是最新版本(根据datatables.net)。我不知道这对你的应用程序有多大影响,但链接的小提琴包括datatables.net的最新版本。我也不确定你从小提琴中得到的结果,但它确实在控制台中注销了一个整数,然后点击“#”;
另一件事是您的表格未必正确设置。 "交换" th元素与" Swap Up"不一致td元素,与#34; Swap Down"
相同 <th>Swap Up</th>
<th>Swap Down</th>
</tr>
</thead>
<tbody>
<tr>
<td>Trident</td>
<td>Internet
Explorer 4.0</td>
<td>Win 95+</td>
<td><i class='fa fa-caret-down swapDown'></i></td>
<td><i class='fa fa-caret-up swapUp'></i></td>
您可能想要反转td元素。或者命名惯例让我感到困惑。
答案 1 :(得分:0)
我今天早上一直在玩这个,这就是我已经开始运行的,我真的不确定它是最好的解决方案,但确实有效:< / p>
$(function() {
var table = $("#example").DataTable({
"order": [
[0, 'asc']
],
"paging": true,
"columns": [{
"visible": false
}, {
"orderable": false
}, {
"orderable": false
}, {
"orderable": false
}, {
"render": function(d) {
return $("<i/>", {
"class": "fa fa-caret-down swapable swapDown"
}).prop("outerHTML");
},
"orderable": false
}, {
"render": function(d) {
return $("<i/>", {
"class": "fa fa-caret-up swapable swapUp"
}).prop("outerHTML");
},
"orderable": false
}]
});
$('#example tbody').on('click', 'td', function(event) {
// We're only interested in cells with a class of swapable
if ($(this).find(".swapable")) {
// Helper variable
var _this = $(this).find(".swapable");
// Total number of rows (including hidden rows (zero based index))
var tableRows = table.data().length - 1;
// Index of current row
var rowIndex = table.row(this).index();
// Data of current row
var rowData = table.row(this).data();
// Index value of row (artifical because it's ours) - also tempval
var artificalIndex = ~~rowData[0];
/*
* If we're on the bottom row of the table and the direction of travel is downwards or if we're
* on the top row and the direction of travel is upwards then we need to just swap the top and
* bottom rows
*/
if(
(_this.hasClass("swapDown") && artificalIndex === tableRows)
||
(_this.hasClass("swapUp") && artificalIndex === 0)
){
var topIndex, bottomIndex;
table.rows().every(function(rowIdx, tableLoop, rowLoop) {
var data = this.data();
if(~~data[0] === 0){
topIndex = rowIdx;
}
if(~~data[0] === tableRows){
bottomIndex = rowIdx;
}
});
table.cell(topIndex, 0).data(tableRows);
table.cell(bottomIndex, 0).data(0);
}else{
var movingIndex, tempData;
table.rows().every(function(rowIdx, tableLoop, rowLoop) {
var data = this.data();
// Moving down
if (_this.hasClass("swapDown") && ~~data[0] === artificalIndex + 1) {
movingIndex = rowIdx;
tempData = data[0];
}
// Moving up
if (_this.hasClass("swapUp") && ~~data[0] === artificalIndex - 1) {
movingIndex = rowIdx;
tempData = data[0];
}
});
table.cell(rowIndex, 0).data(tempData);
table.cell(movingIndex, 0).data(artificalIndex);
}
table.draw(false);
}
});
});
我在索引方面遇到了一些问题,因为我不能100%确定内部索引在draw()
之后刷新,因此我决定使用隐藏索引并对其进行排序。这是用于创建表格的HTML:
<div class="container">
<table cellpadding="0" cellspacing="0" border="0" class="table" id="example">
<thead>
<tr>
<th>Index</th>
<th>Rendering engine</th>
<th>Browser</th>
<th>Platform(s)</th>
<th>Swap Down</th>
<th>Swap Up</th>
</tr>
</thead>
<tbody>
<tr>
<th>0</th>
<td>Trident</td>
<td>Internet Explorer 4.0</td>
<td>Win 95+</td>
<td></td>
<td></td>
</tr>
<tr>
<th>1</th>
<td>Trident</td>
<td>Internet Explorer 5.0</td>
<td>Win 95+</td>
<td></td>
<td></td>
</tr>
<tr>
<th>2</th>
<td>Trident</td>
<td>Internet Explorer 5.5</td>
<td>Win 95+</td>
<td></td>
<td></td>
</tr>
<tr>
<th>3</th>
<td>Trident</td>
<td>Internet Explorer 6</td>
<td>Win 98+</td>
<td></td>
<td></td>
</tr>
<tr>
<th>4</th>
<td>Trident</td>
<td>Internet Explorer 7</td>
<td>Win XP SP2+</td>
<td></td>
<td></td>
</tr>
<tr>
<th>5</th>
<td>Trident</td>
<td>AOL browser (AOL desktop)</td>
<td>Win XP</td>
<td></td>
<td></td>
</tr>
<tr>
<th>6</th>
<td>Gecko</td>
<td>Firefox 1.0</td>
<td>Win 98+ / OSX.2+</td>
<td></td>
<td></td>
</tr>
<tr>
<th>7</th>
<td>Gecko</td>
<td>Firefox 1.5</td>
<td>Win 98+ / OSX.2+</td>
<td></td>
<td></td>
</tr>
<tr>
<th>8</th>
<td>Gecko</td>
<td>Firefox 2.0</td>
<td>Win 98+ / OSX.2+</td>
<td></td>
<td></td>
</tr>
<tr>
<th>9</th>
<td>Gecko</td>
<td>Firefox 3.0</td>
<td>Win 2k+ / OSX.3+</td>
<td></td>
<td></td>
</tr>
<tr>
<th>10</th>
<td>Gecko</td>
<td>Camino 1.0</td>
<td>OSX.2+</td>
<td></td>
<td></td>
</tr>
<tr>
<th>11</th>
<td>Gecko</td>
<td>Camino 1.5</td>
<td>OSX.3+</td>
<td></td>
<td></td>
</tr>
<tr>
<th>12</th>
<td>Gecko</td>
<td>Netscape 7.2</td>
<td>Win 95+ / Mac OS 8.6-9.2</td>
<td></td>
<td></td>
</tr>
<tr>
<th>13</th>
<td>Gecko</td>
<td>Netscape Browser 8</td>
<td>Win 98SE+</td>
<td></td>
<td></td>
</tr>
<tr>
<th>14</th>
<td>Misc</td>
<td>Lynx</td>
<td>Text only</td>
<td></td>
<td></td>
</tr>
</tbody>
</table>
</div>
希望有帮助,并且我感谢社区提供有关如何改进的反馈,因为我很确定我错过了什么......?