0

我有 100 行文本区域,用户可以将信息添加到(不按任何特定顺序)文本区域如下所示:

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>';

我正在尝试将所有未“未定义”的值“推高”到任何空白文本区域中。在底部留下空白文本区域,在顶部留下填充文本区域。我这样做是为了保留用户编写的东西的顺序,这里是代码:

$('#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('');
                }
              });
            }
          });
        }
      });
    }
  });
});

我的问题是我多次运行此代码以完成工作(真的很愚蠢)我无法理解逻辑。如果我只运行一次:

$($('#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('');
  }
});

然后只有值 undefined 的 textarea 之后的第一个 textareas 值被推到顶部,它的新值成为将被移动到顶部的第二个文本区域。我想在不使用排序插件的情况下解决这个问题,有人可以帮我理解逻辑吗?

已修复...在聊天中 @Patrick Evans 的帮助下

$($('#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(''); 
} 
});
4

1 回答 1

1

遍历每个文本区域,如果它不是空的,则将其值放入第一个没有值的文本区域。

$('#items .itemv').each(function(){
    if( $(this).val() != "" ) {
        $('#items .itemv').filter(function() {
            return this.value=="";
        }).
        first().
        val( $(this).val() );
        $(this).val("");
    }    
});
于 2013-06-30T14:25:15.333 回答