Вот основная структура HTML для моей страницы:
-
Root element
- Level One a
- Level One b
-
Level One parent
- Level Two a
-
Level Two parent
- Level Three a
- Level Three b
- Level Two b
- Level One c
например:
Могло быть любое количество объектов на каждом уровне отступа мимо корня, но только когда-либо будет 3 уровня и только один родитель на уровень (т.е.: существует всегда точно 3
s под корнем, но количеством s является переменным).
Я позволяю пользователю переупорядочивать эту структуру с помощью UI jQuery Поддающийся сортировке плагин. Для добавления нового объекта существует три группы объектов (уровень объекты, уровень два объекта, объекты уровня 3), которые находятся рядом на странице с этим деревом. Пользователь может перетащить оттуда в список для добавления его - но это должно быть добавлено на соответствующем уровне.
У меня уже есть эта работа с помощью draggable
с connectToSortable
опция:
$('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.
Также были проблемы с сортировкой ранее: мой случай был с аккордеоном и сортировкой внутри. Я не смог получить ясного ответа, но если вы посмотрите на любую из реализаций дерева, то они используют перетаскивание напрямую и не сорбируются.
Основываясь на этом опыте - не очень точном, насколько я знаю - я бы согласился с akiller и сказал: возьмите хороший плагин дерева, вместо того, чтобы пытаться сделать это самостоятельно с помощью sortable. jsTree довольно хорош и должен делать свою работу - есть и другие, если по каким-то причинам jsTree не удовлетворяет вашим потребностям.
Ты можешь использовать другие плагины? jsTree делает такие вещи очень хорошо.