2013-06-30 50 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命名为我的数据库列并向上推然后我可以按照该顺序将值保存到数据库中。 –