我有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('');
}
});
代码让我害怕圣钼 – NicoSantangelo
_DIABLO SUMMONED_ – mishik