jQuery draggable + sortable:如何在追加到sortable之前更改draggable元素

时间:2016-07-22 14:41:54

标签: jquery jquery-ui drag-and-drop

我正在尝试制作一个拖放html构建器(如mailchimp),我想在右边有15个图片代表HTML代码并删除他们在一个可排序的列表上。但是当图片被删除到可排序列表时,我想在html代码中更改拖动的图片。问题是它不能很好地运作......

    <script src="https://code.jquery.com/jquery-1.12.4.js"></script>
    <script src="https://code.jquery.com/ui/1.12.0/jquery-ui.js"></script>

    <style>
        .bloc{height:200px;width:400px;border: 2px solid green;}
        #div_1{height:200px;width:400px;border:5px dotted red;}
        #div_2{height:200px;width:400px;background-color:yellow;}
        #left{
            width:400px;
            min-height:400px;
            max-height:;
            float:left;
            border:1px solid black;
            margin:0;padding:0;
        }
        #right{
            width:420px;
            float:right;
            border: 1px solid red;
            margin:0;
            padding:0;
        }
    </style>

    <script>
        $(function(){
            $(function(){
                $("#left").sortable({
                    revert: true,
                    axis: "y",
                    receive: function(e,ui){
                        var myDataId= $(ui.item).attr("data-id");

                        alert(ui.item[0]);
                        alert($("#left").children().attr("alt"));
                        $("#left ui.item").replaceWith($("#petit_div .bloc[data-id="+ myDataId +"]").show());
                        alert(myDataId);

                        //$(ui.item).replaceWith("$(.bloc[data-id="+ dropElementDataId +"])");
                        /*
                        var dropElementDataId = $(ui.item.parent).attr("data-id");
                        alert(ui.item.parent().attr("data-id"));
                        $(ui.item).replaceWith("$(.bloc[data-id="+ dropElementDataId +"])");
                        */
                    }
                }).disableSelection();
            }); 
            $(function(){
                $(".my_div").children().draggable({
                    connectToSortable: "#left",
                    helper: "clone",
                    revert: "invalid"
                });
            });
        }); 
    </script>

    <div id="wrap" style="width:1000px;margin:auto"> 
        <div id="petit_div">
            <div class="bloc" id="1" data-id="1" style="display:none">Ceci est le div 1</div>
            <div class="bloc" id="2" data-id="2" style="display:none">Ceci est le div 2</div>
            <div class="bloc" id="3" data-id="3" style="display:none">Ceci est le div 3</div>
            <div class="bloc" id="4" data-id="4" style="display:none">Ceci est le div 4</div>
            <div class="bloc" id="5" data-id="5" style="display:none">Ceci est le div 5</div>
            <div class="bloc" id="6" data-id="6" style="display:none">Ceci est le div 6</div>
            <div class="bloc" id="7" data-id="7" style="display:none">Ceci est le div 7</div>
            <div class="bloc" id="8" data-id="8" style="display:none">Ceci est le div 8</div>
            <div class="bloc" id="9" data-id="9" style="display:none">Ceci est le div 9</div>
            <div class="bloc" id="10" data-id="10" style="display:none">Ceci est le div 10</div>
            <div class="bloc" id="11" data-id="11" style="display:none">Ceci est le div 11</div>
            <div class="bloc" id="12" data-id="12" style="display:none">Ceci est le div 12</div>
            <div class="bloc" id="13" data-id="13" style="display:none">Ceci est le div 13</div>
            <div class="bloc" id="14" data-id="14" style="display:none">Ceci est le div 14</div>
            <div class="bloc" id="15" data-id="15" style="display:none">Ceci est le div 15</div>
        </div>

        <div id="left">

        </div>

        <div id="right" >
            <table width="100%" style="text-align:center;height:100%">
            <tbody>
                <tr style="height:133px">
                    <td>
                        <div style="height:100%;width:100%;" class="my_div" data-type="content" data-id="1" alt="alt_div_image_1">
                            <img src="_pictures/1.png" alt="héhé" data-id="1"/>
                        </div>
                    </td>
                    <td>
                        <div style="height:100%;width:100%" class="my_div" data-type="content" data-id="2">
                            <img src="_pictures/2.png" alt="héhé" data-id="2"/>
                        </div>
                    </td>
                    <td>
                        <div style="height:100%;width:100%" class="my_div" data-type="content" data-id="3">
                            <img src="_pictures/3.png" alt="héhé" data-id="3"/>
                        </div>
                    </td>
                </tr>

                <tr style="height:133px">
                    <td>
                        <div style="height:100%;width:100%" class="my_div" data-type="content" data-id="4">
                            <img src="_pictures/4.png" alt="héhé" data-id="4"/>
                        </div>
                    </td>
                    <td>
                        <div style="height:100%;width:100%" class="my_div" data-type="content" data-id="5">
                            <img src="_pictures/5.png" alt="héhé" data-id="5"/>
                        </div>
                    </td>
                    <td>
                        <div style="height:100%;width:100%" class="my_div" data-type="content" data-id="6">
                            <img src="_pictures/6.png" alt="héhé" data-id="6"/>
                        </div>
                    </td>
                </tr>

                <tr style="height:133px">
                    <td class="my_td_parent">
                        <div style="height:100%;width:100%" class="my_div" data-type="content" data-id="7">
                            <img src="_pictures/7.png" alt="héhé" data-id="7"/>
                        </div>
                    </td>
                    <td class="my_td_parent">
                        <div style="height:100%;width:100%" class="my_div" data-type="content" data-id="8">
                            <img src="_pictures/8.png" alt="héhé" data-id="8"/>
                        </div>
                    </td>
                    <td class="my_td_parent">
                        <div style="height:100%;width:100%" class="my_div" data-type="content" data-id="9">
                            <img src="_pictures/9.png" alt="héhé" data-id="9"/>
                        </div>
                    </td>
                </tr>

                <tr style="height:133px">
                    <td class="my_td_parent">
                        <div style="height:100%;width:100%" class="my_div" data-type="content" data-id="10">
                            <img src="_pictures/10.png" alt="héhé" data-id="10"/>
                        </div>
                    </td>
                    <td class="my_td_parent">
                        <div style="height:100%;width:100%" class="my_div" data-type="content" data-id="11">
                            <img src="_pictures/11.png" alt="héhé" data-id="11"/>
                        </div>
                    </td>
                    <td class="my_td_parent">
                        <div style="height:100%;width:100%" class="my_div" data-type="content" data-id="12">
                            <img src="_pictures/12.png" alt="héhé" data-id="12"/>
                        </div>
                    </td>
                </tr>

                <tr style="height:133px">
                    <td class="my_td_parent">
                        <div style="height:100%;width:100%" class="my_div" data-type="content" data-id="13">
                            <img src="_pictures/13.png" alt="héhé" data-id="13"/>
                        </div>
                    </td>
                    <td class="my_td_parent">
                        <div style="height:100%;width:100%" class="my_div" data-type="content" data-id="14">
                            <img src="_pictures/14.png" alt="héhé" data-id="14"/>
                        </div>
                    </td>
                    <td class="my_td_parent">
                        <div style="height:100%;width:100%" class="my_div" data-type="content" data-id="15">
                            <img src="_pictures/15.png" alt="héhé" data-id="15"/>
                        </div>
                    </td>
                </tr>
            </tbody>
        </table>
        </div>
    </div>

您可以在此处查看我的代码:https://jsfiddle.net/9r8h8y57/

谢谢。

2 个答案:

答案 0 :(得分:0)

我最近做了类似这样的事情,我在图像上有ID,所以我知道被删除的内容,并且基于我发现的ID只是附加在我想要的HTML上

     $( '.droppable' ).droppable({
         drop: function( event, ui ) {
            id = $(ui.draggable).attr('id');
            switch(id){
                case '1':
                    $('#container').append('*html*');
                    break;
            }
        },
    });

不确定这是否有帮助,但它是另一种方式!我可以在那里放置,但可排序也可以。

答案 1 :(得分:0)

扩展Scannerz的答案。在全球空间,我建议创建一个像:

这样的对象
var html = {
  1: $("<div>", { id: 1, class: 'bloc', data-id: 1}).html("Ceci est le div 1"),
  2: $("<div>", { id: 2, class: 'bloc', data-id: 2}).html("Ceci est le div 2"),
  n: $("<div>", { id: n, class: 'bloc', data-id: n}).html("Ceci est le div n")
}

然后你可以调用你想要的对象:

$('#container').append(html[$(ui.draggable).attr('id')]);

另一种选择是在被选为Helper时简单地创建对象。我最近有一个相关的问题:https://jsfiddle.net/Twisty/Lbu7ytbj/其中,助手必须是一组多个项目。

对于您的用例,我们创建了一个附加正确内容的函数:

https://jsfiddle.net/Twisty/nfz2qwp1/1/

$(function() {
  $("#left").sortable({
    revert: true,
    axis: "y",
    update: function(e, ui) {
      if (!ui.item.hasClass("new")) {
        return true;
      }
      var newBloc = $("<div>", {
        id: ui.item.data("id").length ? ui.item.data("id") : $("#left .bloc").length + 1,
        class: ui.item.attr("class")
      }).data({
        id: ui.item.data("id"),
        type: ui.item.data("type")
      }).html("Ceci est le div " + ui.item.data("id"));
      ui.item.remove();
      newBloc.removeClass("new");
      $("#left").append(newBloc);
    }
  }).disableSelection();
  $("#right .my_div").draggable({
    connectToSortable: "#left",
    helper: "clone",
    revert: "invalid"
  });
});