2010-02-08 90 views
8

下面是我的頁面的基本HTML結構:問題與嵌套的jQuery sortables

<div id="selectedItemsTop"> 
    <ul> 
     <li> 
      Root element 
      <ul> 
       <li>Level One a</li> 
       <li>Level One b</li> 
       <li> 
        Level One parent 
        <ul> 
         <li>Level Two a</li> 
         <li> 
          Level Two parent 
          <ul> 
           <li>Level Three a</li> 
           <li>Level Three b</li> 
          </ul> 
         </li> 
         <li>Level Two b</li> 
        </ul> 
       </li> 
       <li>Level One c</li> 
      </ul> 
     </li> 
    </ul> 
</div> 

如:

  • 根元素
    • 一級一
    • 級別一架B
    • Level One parent
      • 第二層次一
      • 等級兩親
        • 三級一
        • 等級三級乙
      • 等級兩個B
    • 等級一種C

可能有任何數量的項目位於根目錄之後的每個縮進級別,但只會有3個級別,並且每個級別只有一個父級(即:根目錄中始終只有3個<ul>,但數字的<li> s是可變的)。

我允許用戶使用jQuery UI Sortable插件重新排序此結構。要添加新項目,有三組項目(第一級項目,第二級項目,第三級項目),它們在頁面上與這棵樹相鄰。用戶可以從那裏拖動到列表中添加它 - 但它必須添加到相應的級別。

我有這方面的工作已經在使用draggableconnectToSortable選項:

$('ul.availableItems').each(function(i) { 
    var selector = "#selectedItemsTop > ul"; 
    for (var j = 0; j <= i; ++j) { // count from 0 to [0, 1, 2] 
     selector += " > li > ul"; 
    } 
    // eg: selector == "#selectedItemsTop > ul > li > ul" 
    // eg: selector == "#selectedItemsTop > ul > li > ul > li > ul" 
    // eg: selector == "#selectedItemsTop > ul > li > ul > li > ul > li > ul" 
    $(this) 
     .find('li') 
     .draggable({ 
      connectToSortable : selector 
     }) 
    ; 
}); 
$('#selectedFieldsTop > ul > li ul').sortable(); 

正如我所說的,這個作品......除了IE瀏覽器的一切。一級項目工作完美,但沒有2級或3級項目將被添加到可排序。嘗試對已經存在的二級或三級項目之一進行排序,使得它能夠拾取整個「一級家長」李並將整個過程移動。

有什麼可以想到的,這將使這項工作在Firefox,但不是IE瀏覽器?你能想出一個不同的方式來處理這個問題嗎?

版本:火狐3.6,IE7,jQuery的1.3.2,jQuery UI的1.7.2

更新
這裏有JSBin工作代碼:http://jsbin.com/ixabo/edit - 不出所料,這不是」 t在IE中工作,但我認爲這是JSBin的問題(「_console is undefined」)。要看到它半工作,也許複製/粘貼到本地文件,並在IE中打開它。

+0

是否可以在http://www.jsbin.com上製作一個實例? – Natrium 2010-02-08 07:30:50

+0

明天當我回到辦公室時我會把它放在那裏......(只是你看,它會正常工作) – nickf 2010-02-08 14:35:29

+0

@Natrium - 現在檢查鏈接。 – nickf 2010-02-08 23:37:39

回答

1

早期還有可排序問題:我的情況是手風琴和排序內部。我無法得到明確的答案,但是如果您查看任何樹實現,則直接使用拖放操作並且無法排序。

基於這樣的經驗 - 我不太確切我知道 - 我會同意akiller並說:拿一個好的樹插件,而不是試圖用可排序的方式來做到這一點。 jsTree非常好,應該做的工作 - 也有其他人,如果由於某種原因jsTree不適合您的需求。