我正在使用脚本轻松地使用jQuery UI对嵌套列表进行排序。 它工作得很好,但是有一个小小的“虫子”我无法抹去。
使用jsfiddle(http://jsfiddle.net/fewTp/)和以下说明了解最新情况:)
如果你将一个子点拖得更深一层,就会发生“错误”(将“子菜单2”向右拖动并将其拖放,使其更深一些级别),然后再尝试将其拖回。 正如您所看到的,在您将“submenu2”向左拖动的那一刻,“submenu1”将跳下。
如果你不喜欢jsfiddle这里是我的代码:
HTML:
<ul>
<li>
<span><p>menu 1</p>
<ul>
<li>
<span><p>submenu 1</p>
<ul></ul>
</span>
</li>
<li>
<span><p>submenu 2</p>
<ul></ul>
</span>
</li>
</ul>
</span>
</li>
<li>
<span><p>menu 2</p>
<ul>
<li>
<span><p>submenu 1</p>
<ul></ul>
</span>
</li>
<li>
<span><p>submenu 2</p>
<ul></ul>
</span>
</li>
</ul>
</span>
</li>
</ul>
CSS:
* {
font-family: Arial;
}
span {
cursor: move;
display: inline-block;
margin: 0 10px 10px 10px;
/* margin-bottom: -62px;*/
}
p {
margin: 0;
border-radius: 5px;
border: 1px solid #793D00;
padding: 10px;
height: 20px;
width: 180px;
}
.highlighter {
text-align: center;
cursor: move;
border-radius: 5px;
width: 200px;
height: 40px;
display: inline-block;
margin: 0px 10px 14px 10px;
padding: 0;
border: 1px dashed #000;
background:#FFFF91;
}
ul {
float: left;
list-style-type: none;
}
li {
position: relative;
/*z-index: 6;*/
}
ul li {
float: left;
display: block;
padding: 0 40px;
}
li ul {
float: none;
margin: 0;
}
ul li ul li {
float: none;
margin: 0;
padding: 0px;
}
li ul.ui-sortable {
min-height: 60px;
/*border: 1px solid #f00;*/
position: relative;
/*z-index: 5;*/
margin-top: 10px;
margin-left: 40px;
padding: 10px 0 0 0;
}
.ui-sortable-helper {
padding: 0;
margin: 0 10px 10px 10px;
}
ul.no-child {
margin-bottom: -73px;
}
JavaScript的:
$('ul').disableSelection().sortable({
connectWith: "ul",
tolerance: "pointer",
cursorAt: {
left: 40,
top: 20
},
cursor: "move",
opacity: 0.5,
placeholder: "highlighter",
helper: "clone",
revert: 200,
start: function(e, ui) {
if(ui.item.parent().hasClass("children-1")){
ui.item.parent("ul").removeClass("child").addClass("no-child");
}
},
stop: function(e, ui) {
mkUl();
}
});
function mkUl(){
$("ul").each(function(){
$(this).removeAttr("class");
var ulLevel = $(this).parents('ul').length+1;
$(this).addClass("ui-sortable no-child level_"+ulLevel);
var childC = $(this).children("li").size();
$(this).has("li").removeClass("no-child").addClass("child children-"+childC);
$(this).children("li:first").addClass("first");
$(this).children("li:last").addClass("last");
});
}
$(document).ready(function(){
mkUl();
});