如何删除jquery中的元素可排序?

时间:2016-01-18 17:57:18

标签: javascript jquery html css jquery-ui-sortable

我的HTML代码是这样的:

<div class="content">
    box 1 (Customer)
    <ol class='example mauDIDROP vertical'>
        <li>Valentino Rossi</li>
        <li>David Beckham</li>
        <li>Eden Hazard</li>
        <li>Lionel Messi</li>
        <li>Christiano Ronaldo</li>
        <li>Frank Lampard</li>
    </ol>
</div>

<div class="content">
    <form id="myForm" action="" method="POST">
        box 2 (Room Type)
        <br>
        <select id="room_type">
            <option value="1">Single Room</option>
            <option value="2">Double Room</option>
            <option value="3">Twin Room</option>
        </select>
        <input type="button" value="Add" style="margin-top: -10px;" id="add_room">

        <ol class="example areaDROP vertical" id="room_list">

            <li class="room_number msg1" id="room_remove11">Deluxe Room<div class="room-remove"><a href="javascript:void(0)" onclick="delete_room(11)"><i class="fa fa-times"></i></a></div><ol><li id="room_remove21">John Terry<div class="room-remove"><a href="javascript:void(0)" onclick="delete_room(21)"><i class="fa fa-times"></i></a></div></li></ol></li>
            <li class="room_number msg1" id="room_remove12">Family Room<div class="room-remove"><a href="javascript:void(0)" onclick="delete_room(12)"><i class="fa fa-times"></i></a></div><ol><li id="room_remove22">Jose Mourinho<div class="room-remove"><a href="javascript:void(0)" onclick="delete_room(22)"><i class="fa fa-times"></i></a></div></li></ol></li>
        </ol>

        <button type="submit">Save</button>
    </form>

</div>

我的Javascript是这样的:

    function delete_room(id){
        $('#room_remove'+id).remove();
    }

    $(document).ready(function(){  
        $("ol.mauDIDROP").sortable({
            group: '.example'
        });

        $("ol.areaDROP").sortable({
            group:  '.example',
        });

        var room_type_number = 5;
        $('#add_room').click(function(){
            var text = $("#room_type option:selected").html();
            var room_type_id = $.trim($('#room_type').val());       

            $('#room_list').append('<li class="room_number msg" id="room_remove'+(++room_type_number)+'" data-id="'+room_type_id+'" data-name="'+text+'">'+text+'<div class="room-remove"><a href="javascript:void(0)" class="remove'+room_type_id+'" onclick="delete_room('+room_type_number+')"><i class="fa fa-times"></i></a></div><ol></ol></li>');

            $("ol.mauDIDROP").sortable({
                group: '.example'
            });

            $("ol.areaDROP").sortable({
                group:  '.example',    
            });              
        });
    });

演示是这样的:https://jsfiddle.net/oscar11/4wnfnz6z/1/

当我点击关闭图标时,所选元素已成功删除。

但我想要的是: 当我点击关闭图标时,所选元素被删除,删除的客户元素出现在方框1中。

例如:http://imgur.com/rEzryt3

当我点击关闭图标(豪华房间)时,它将如下所示:http://imgur.com/YpkBTKH

如何将已删除的客户元素移至方框1?

有什么建议可以解决我的问题吗?

谢谢

2 个答案:

答案 0 :(得分:2)

您可以更改delete_room功能,以便从您要删除的房间中获取客户名称,然后将其作为li附加到您的左侧容器中:

function delete_room(id){
    var customers = '';
    $('#room_remove'+id).find('li').each( function() {
        customers += '<li>'+$(this).text()+'</li>';
    });
    $('#room_remove'+id).remove();
    $('ol.example.mauDIDROP.vertical').append(customers);
}

检查小提琴:Fiddle

答案 1 :(得分:0)

这种方法具有更好的性能,因为您将find设置为var并执行循环而不是使用find进行循环。

var child = $('#room_remove'+id).find('li');
if(child.length > 0){
    var li = "";
        child.each(function(){
            li += "<li>"+$(this).text()+"</li>";
        });
}

$(".mauDIDROP").append($(li));