Прежде всего - если вы хотите переместить строку, вам не нужно ее клонировать.Когда вы выбираете какой-либо элемент HTML и добавляете / добавляете его в другом месте, тогда он будет удален из старой позиции - так работает DOM.Таким образом, согласно html, который вы написали, когда вы делаете это:
var $table = $('table');
$table.prepend($('#a3'));
, тогда строка с идентификатором 'a3' будет удалена из ее старой позиции и помещена в начало таблицы.
Еслимы предполагаем, что у вас есть массив с порядком, который вы хотите достичь:
var order = ['a3', 'a4', 'a5', 'a1', 'a2'];
, затем, чтобы отсортировать строки по этой таблице, вам нужно просто выполнить итерацию по последнему элементу в этом массиве, получить строку с текущим идентификатором из таблицыи поместите его в начало следующим образом:
var order = ['a3', 'a4', 'a5', 'a1', 'a2'];
var $table = $('table');
for (var i = order.length; --i >= 0; ) {
$table.prepend($table.find('#' + order[i]));
}
А когда вы хотите переместить один ряд и поставить перед другим:
var $rowa = $('#a1');
var $rowb = $('#a5');
$rowb.insertBefore($rowa);
// or even like this
$('#a5').insertBefore('#a1');