Посмотрев все остальные примеры и выяснив, что они не совсем работают должным образом, я решил создать такой, который работает.
Вот пример | С эффектами |Код
var $tbody = $("table tbody");
var last_position = -1;
$("input").click(function(){
var $row = $(this).closest("tr"),
$first_row = $tbody.find("tr:first-child"),
$trs = $tbody.find("tr");
if($row.index() == $first_row.index()){
if( last_position > 0 ){
$trs.eq(last_position).after($row);
last_position = -1;
}
return;
}else if(last_position > 0){
$trs.eq(last_position).after($first_row);
}
$tbody.find("input").not(this).attr("checked", false);
last_position = $row.index();
$tbody.prepend($row);
});
Вы описываете два типа действий
- Пользователь нажимает на ввод, который не первая строка, первая строка перемещается назад,эта строка перемещается вверх
![switcharoo](https://i.stack.imgur.com/aTsU5.png)
- Пользователь щелкает ввод первой строки, строка которой уже была перемещена, первая строка перемещается назад
![switcharoo 2](https://i.stack.imgur.com/IYxyC.png)
Когда пользователь нажимает на ввод, мыНам нужно знать, где это было, прежде чем мы переместили его, поэтому мы собираемся сохранить последнюю позицию.Мы даем ему значение -1, так как нам нужно значение по умолчанию, означающее, что все строки находятся там, где они были изначально.
var last_position = -1;
Затем мы определяем переменные, которые будем использовать
var $row = $(this).closest("tr"), //input row clicked
$first_row = $tbody.find("tr:first-child"), //first row
$trs = $tbody.find("tr"); //all the table rows, so we can switch 'em around
Затем мы проверяем, была ли нажата первая строка, и сбрасываем last_position, если это так.Мы также следим за тем, чтобы последняя позиция еще не была сброшена или находилась на 0-й позиции, поскольку в этих случаях она не должна двигаться.
if($row.index() == $first_row.index()){
if( last_position > 0 ){
$trs.eq(last_position).after($row);
last_position = -1;
}
return;
}else if(last_position > 0){
$trs.eq(last_position).after($first_row);
}
Наконец, мы снимаем все остальные поля, обновляем последнююпоместите его в этот ряд, а затем поместите его сверху.
$tbody.find("input").not(this).attr("checked", false);
last_position = $row.index();
$tbody.prepend($row);