2017-08-17 45 views
2

我有一個包含文本和箭頭的列表。我想拖動或排序箭頭的方式:使用jQuery UI從ul列表中拖出特定部分?

  1. 他們可以從1列表拖到其他列表。
  2. 前綠色箭頭即紅色箭頭總是高於綠色,如果有人試圖拖動它上面,它不應該是可能的,它位於下面只紅色的紅色箭頭不能來。

這是我到目前爲止已經試過:

$("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>

問題:

眼下整個列表拖動,我想只有箭頭拖動。

在此先感謝

快樂編碼。

+0

這一要求是有點混亂,你能不能「*的紅色箭頭無法綠色箭頭即紅色箭頭總是高於綠色,如果有人試圖拖動它上面,它不應該是可能的,它位於下面只紅色。*之前來了」明確你想要什麼? –

回答

1

您可以使用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)將指定哪些元素的父元素中應該排序。

+1

Perfecto !!!!!! –

+0

嘿阿布舍克,我面臨的一個問題,如果我保持一個div在我的文字部分,那麼我可以拖動爲好。有沒有辦法阻止文本拖動時保存在一個div? –

+0

'ul.droptrue li'中的每個元素都是可排序的。 –

相關問題