javascript - 使用 jquery UI 从 ul 中的列表中拖动特定部分?

标签 javascript jquery html css jquery-ui

我有一个包含文本和箭头的列表。我想以这样的方式拖动或排序箭头:

  1. 它们可以从 1 个列表拖到其他列表。
  2. 红色箭头不能出现在绿色箭头之前,即红色箭头总是在绿色上方,如果有人试图在它上面拖动,那应该是不可能的,它只位于红色下方。

This is what i have tried so far:

$("ul.droptrue").sortable({
  connectWith: "ul"
});
.green {
  color: green
}

.red {
  color: red;
}

li,
ul {
  list-style: none;
}
<link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" />
<script src="https://code.jquery.com/jquery-1.12.4.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
<ul class="droptrue">
  <li>i am a text 1 <i class="fa fa-arrow-left red"></i> </li>
  <li>i am a text 2 <i class="fa fa-arrow-left green"></i> </li>
  <li>i am a text 3 </li>
  <li>i am a text 4 </li>
  <li>i am a text 5 </li>
  <li>i am a text 6 </li>
</ul>

Problem:

现在整个列表都在拖动,我只想拖动箭头。

提前致谢

快乐编码。

最佳答案

您可以使用 update()事件并比较两个箭头的偏移量,如果条件不匹配则使用 cancel()取消排序的方法。

$(document).ready(function() {
  $("ul.droptrue li").sortable({
    connectWith: "li",
    items: "> i",
    update: function(event, ui) {
      var redArrow = $('.fa.fa-arrow-left.red').offset().top;
      var greenArrow = $('.fa.fa-arrow-left.green').offset().top;
      if (redArrow >= greenArrow) {
        $("ul.droptrue li").sortable("cancel");
        console.log("Red arrow cannot be greater than Green arrow")
      }
    }
  });
})
.green {
  color: green
}

.red {
  color: red;
}

li,
ul {
  list-style: none;
}

ul {
  width: 100px
}

li div {
  display: inline-block
}
<link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" />
<script src="https://code.jquery.com/jquery-1.12.4.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
<ul class="droptrue">
  <li>
    <div>i am a text 1</div> <i class="fa fa-arrow-left red pull-right"></i> </li>
  <li>i am a text 2 <i class="fa fa-arrow-left green pull-right"></i> </li>
  <li>i am a text 3 </li>
  <li>i am a text 4 </li>
  <li>i am a text 5 </li>
  <li>i am a text 6 </li>
</ul>


编辑:sortable() 中添加了 items: "> i" ( item selector ) 这将指定父元素中的哪个元素元素应该是可排序的。

关于javascript - 使用 jquery UI 从 ul 中的列表中拖动特定部分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45732246/

相关文章:

javascript - 通过 2 个不同的键比较 2 个对象数组。并创建一个包含父级和子级的嵌套对象

javascript - jQuery在2个动态生成的层下触发事件

javascript - JQuery Cookies Creation...检查cookie是否已经有一个值

javascript - 如何实现当用户在 native 中按下图片时动态显示口袋妖怪详细信息的详细信息屏幕?

jquery - 如何使用 jQuery 选择列表中的最后 X 个元素?

javascript - 如何获取 JQuery.trigger ('click' );启动鼠标点击

jquery - Bootstrap - 悬停效果仅在导航栏未折叠时有效

javascript - 使用 jquery 搜索,无需提交按钮

html - 如何使背景 Sprite 响应并只显示一半高度?

javascript - 如何从回调javascript导出结果