这是我的页面的基本
HTML结构:
- <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>
例如:
>根元素
>一级a
>一级b
>一级父母
>二级a
>二级父母
>三级a
>三级b
>二级b
>一级c
在每个缩进级别上可以有超过根的任何数量的项目,但是每个级别只有3个级别,并且每个级别只有一个父级(即:根目录下总是正好3个以上,但是< li> s是可变的).
我允许用户使用jQuery UI Sortable插件重新排序此结构.要添加新项目,有三组项目(第一级项目,第二级项目,第3级项目),它们位于此树的页面上.用户可以从那里拖动到列表中来添加它 – 但必须在相应级别添加它.
我有这个工作已经使用connectToSortable选项draggable:
- $('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级物品添加到可分类物品中.尝试对已经存在的2级或3级项目中的一项进行排序,使其获得整个“一级父级”项目并移动整个项目.
有什么你能想到的可以使这个工作在Firefox而不是IE吗?你能想出一个不同的方法来处理这个问题吗?
版本:Firefox 3.6,IE7,jQuery 1.3.2,jQuery UI 1.7.2
更新:
这是JSBin上的工作代码:http://jsbin.com/ixabo/edit – 不出所料,它在IE中不起作用,但我认为这是JSBin的问题(“_console未定义”).要看到它半工作,可能复制/粘贴到本地文件并在IE中打开它.