我有 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('');
}
});