尝试在点击时使用可排序插件替换元素

时间:2017-01-11 19:56:48

标签: jquery jquery-ui jquery-ui-sortable jquery-ui-draggable jquery-ui-droppable

我有一个列表,我正在使用可排序的jquery UI插件来利用拖放功能。我喜欢这个插件的一件事是它能够更新排序列表并返回它,下面是我的代码的简化示例:

<ul id="sortable">
   <li class="ui-state-default" id="id1"><span class="ui-icon ui-icon-   arrowthick-2-n-s"></span>Item 1</li>
   <li class="ui-state-default" id="id2"><span class="ui-icon ui-icon-arrowthick-2-n-s"></span>Item 2</li>
   <li class="ui-state-default" id="id3"><span class="ui-icon ui-icon-arrowthick-2-n-s"></span>Item 3</li>
      <hr/>
   <li class="ui-state-default" id="id4"><span class="ui-icon ui-icon-arrowthick-2-n-s"></span>Item 4</li>
   <li class="ui-state-default" id="id5"><span class="ui-icon ui-icon-arrowthick-2-n-s"></span>Item 5</li>
   <li class="ui-state-default" id="id6"><span class="ui-icon ui-icon-arrowthick-2-n-s"></span>Item 6</li>
   <li class="ui-state-default" id="id7"><span class="ui-icon ui-icon-arrowthick-2-n-s"></span>Item 7</li>
</ul>

我的javascript代码是:

 $( function() {
$( "#sortable" ).sortable();
 var idsInOrder = $("#sortable").sortable("toArray");
                console.log("//-----------------^^^^");
                console.log(idsInOrder);

});

这里还有jsfiddle链接:

jsfiddle link

现在我要做的是:每当用户点击带有id2的li时,我需要在行之后用id2替换li,所以黑线后面的第一个元素将是带有id2的li。如果我想在没有可排序插件的情况下手动执行,我必须首先删除带有id2的li并在hr之后将其附加到dom。但它不会像这样简单,因为sortable维护列表的顺序,我不确定它是否能够在此操作后更新它。我的问题是,无论如何我可以使用可排序的插件处理这个问题?如果不是接近它的最佳方式是什么?

1 个答案:

答案 0 :(得分:1)

根据我的评论,这是使用dblclick事件的方式。

工作示例:https://jsfiddle.net/Twisty/61mg55gx/

 $(function() {
   $("#sortable").sortable({
     items: "> li[id^='id']"
   });
   var idsInOrder = $("#sortable").sortable("toArray");
   console.log("//-----------------^^^^");
   console.log(idsInOrder);
   $("#sortable li[id='id2']").dblclick(function(e) {
     console.log("ID 2 has been double clicked.");
     $("#sortable li[id='id4']").after($(this).detach());
     $("#sortable").sortable("refresh");
   })
 });

我怀疑你也可以尝试用click来做这件事,我只是过于谨慎。