2013-06-30 52 views
0

我有100行的textarea(S),用戶可以(在任何特定的順序不)將信息添加到的文字區域看起來像這樣的邏輯:推升和排序的數據列表

var item='<textarea class="itemv"id="k'+k+'"rows="1"style="width:100%;border:none;border-bottom:1px solid #CCC;outline:none;resize:none;background:none;font-weight:bold;">'+_.k+'</textarea><br>'; 

我我試圖將所有非'未定義'的值「推」到任何空白的textareas中。在底部留下空白文本區域並在頂部填充textareas。我在做這個保存在女巫事物的秩序由用戶編寫,這裏是代碼:

$('#save2').unbind().bind('click', function() { 
    $($('#items .itemv').get().reverse()).each(function() { 
    var $prev = parseInt($(this).attr('id').replace('k', '')) - 1; 
    $prev = $('#k' + $prev); 
    if ($(this).val() !== '' && $prev.val() === '') { 
     $prev.val($(this).val()); 
     $(this).val(''); 
     //do again 
     $($('#items .itemv').get().reverse()).each(function() { 
     var $prev = parseInt($(this).attr('id').replace('k', '')) - 1; 
     $prev = $('#k' + $prev); 
     if ($(this).val() !== '' && $prev.val() === '') { 
      $prev.val($(this).val()); 
      $(this).val(''); 
      //do again 
      $($('#items .itemv').get().reverse()).each(function() { 
      var $prev = parseInt($(this).attr('id').replace('k', '')) - 1; 
      $prev = $('#k' + $prev); 
      if ($(this).val() !== '' && $prev.val() === '') { 
       $prev.val($(this).val()); 
       $(this).val(''); 
       //do again 
       $($('#items .itemv').get().reverse()).each(function() { 
       var $prev = parseInt($(this).attr('id').replace('k', '')) - 1; 
       $prev = $('#k' + $prev); 
       if ($(this).val() !== '' && $prev.val() === '') { 
        $prev.val($(this).val()); 
        $(this).val(''); 
       } 
       }); 
      } 
      }); 
     } 
     }); 
    } 
    }); 
}); 

我的問題是,我運行這段代碼多次以完成任務(相當愚蠢真)我無法理解邏輯。如果我只運行一次,如:

則只有第一個文本域值與被推到頂部的未定義值的文字區域後,其新的價值成爲會移動的第二個文本區域到頂部。我想用排序插件來解決這個問題,有人能幫我理解邏輯嗎?

固定......與@Patrick埃文斯的幫助下聊天

$($('#items .itemv').get().reverse()).each(function(){ 
    var $prev=parseInt($(this).attr('id').replace('k','')) - 1;$prev=$('#k'+$prev); 
    if($(this).val() != "" &&$prev.val()==='') { 
     $('#items .itemv').filter(function(){return this.value=="";}).first().val( $(this).val());$(this).val(''); 
} 
}); 
+2

代碼讓我害怕聖鉬 – NicoSantangelo

+0

_DIABLO SUMMONED_ – mishik

回答

1

經過各textarea的,如果它不是空的值,寫入,這並不有一個值的第一個文本區域。

$('#items .itemv').each(function(){ 
    if($(this).val() != "") { 
     $('#items .itemv').filter(function() { 
      return this.value==""; 
     }). 
     first(). 
     val($(this).val()); 
     $(this).val(""); 
    }  
}); 
+0

,但我的文字區域都被命名爲同我的SQL數據庫列K1,K2,K3等.. –

+0

那不事關,它並沒有改變他們的名字或任何東西它只是把textarea放在列表的最底部。或者你是否試圖填充k1,k2,等等? –

+0

我需要sql數據庫來反映列表的外觀,以便在k1,k2,k3中的數據被填充,因爲k98,k99,100可能是空白的,所以通過將我的textareas命名爲我的數據庫列並向上推然後我可以按照該順序將值保存到數據庫中。 –