フィドルを参照してください:http: //jsfiddle.net/hp7Cz/25/
$('.moveDownLink').click(function() {
var $thisQuestion = $(this).parent();
var originalIndex = $thisQuestion.index();
var $textField = $(this).next();
var fieldVal = parseInt($textField.val());
var $target = $('.question:eq('+(fieldVal - 1)+')');
var $newElement = $thisQuestion.clone().insertAfter($target);
$newElement.prevUntil(".question:nth-child("+ (originalIndex + 1) +")").each(function() {
var $tField = $(this).find('input');
var val = parseInt($tField.val());
$tField.attr('value',(val - 1));
});
$thisQuestion.detach();
});
サンプルコードは、質問を下に移動する、つまり位置1から4などにのみ処理することです。奇妙なことに、質問1を最初に4番目に移動すると、Chromeで機能します。ただし、.prevUntil()はセレクターで指定された要素で停止せず、n番目の子フィルターで指定されたインデックスに関係なくすべての要素を列挙し続けるため、質問2を3番目に上に移動すると失敗します。
IEとFireFoxでは、すべてが機能し、毎回正しく順序付けられます:1,2,3,4