2009-05-05 85 views
4

我創建了一個具有拖放功能的嵌套列表。我的問題是我希望每個嵌套本身排序。例如:jquery.ui可排序的問題

 
-first_level 
-first_level 
-second_level 
-second_level 
-first_level 

「第一級」應該不能進入「第二級」,反之亦然。我以爲我可以用遏制選項做到這一點,但沒有骰子。它可以使第二層次保持在第一層次之外,而不是相反。

這裏是我的榜樣JS和列表:

$("#sort_list").sortable({ 
    containment: '#sort_list',            
    axis: 'y', 
    revert: true, 
    items: 'li', 
    opacity: 0.8 
}); 
$(".sub_list").sortable({ 
    containment: 'parent', 
    axis: 'y', 
    revert: true, 
    items: 'li', 
    opacity: 0.8, 
}); 
$("#sort_list").disableSelection(); 

<ul id="sort_list"> 
    <li>one</li> 
    <li>two 
    <ul class="sub_list"> 
    <li>sub one</li> 
    <li>sub two</li> 
    </ul> 
    </li> 
    <li>three</li> 
    <li>four</li> 
</ul> 

任何想法?多謝你們!

+0

什麼瀏覽器? – cdeszaq 2009-05-05 20:37:57

+0

如果它至少在FF中工作,我會很高興。現在,當前的拖放功能可以在所有瀏覽器中使用。 – Davy 2009-05-05 20:52:44

回答

0

好吧,看起來像我發現了問題。我聲明:items:'li',所以它沒有將UL檢測爲容器/可排序項目。非常感謝karim79幫我覺得這一切都通過:)

下面是工作代碼(它基本上說:「每個人都留在自己的集裝箱」):

$("#sort_list").sortable({ 
     containment: 'parent',                      
     axis: 'y', 
     revert: true, 
     opacity: 0.8 
    }); 
    $(".sub_list").sortable({ 
     containment: 'parent', 
     axis: 'y', 
     revert: true, 
     opacity: 0.8, 
    }); 
    $("#sort_list").disableSelection(); 

    <ul id="sort_list"> 
     <li>one</li> 
     <li>two 
     <ul class="sub_list"> 
     <li>sub one</li> 
     <li>sub two</li> 
     </ul> 
     </li> 
     <li>three</li> 
     <li>four</li> 
    </ul> 

現在,我們得到了「項目:李「的東西,我們甚至可以從頂部列表中刪除遏制:'父',而不用擔心列表發生碰撞。

2

先給遏制選擇一個複雜的選擇,如:如果你使用jQuery

$("#sort_list").sortable({ 
    containment: '#sort_list:not(.sub_list)',                      
    axis: 'y', 
    revert: true, 
    items: 'li', 
    opacity: 0.8 
}); 

應該做的伎倆1.3+:

(從manual

從jQuery 1.3開始:not()也支持 以逗號分隔的選擇器和 複雜的選擇器,f或例如: :not(div a)and:not(div,a)。

jQuery的可排序手冊說containment選項:

約束指定元素的 範圍內拖動到 - 可以 是DOM元素, '父', '文件','窗口',或者jQuery 選擇器。