Подтвердить что ты не робот

Сортируемые + вложенные списки с пользовательским интерфейсом jQuery 1.8.2

Этот вопрос во всем, SO, но никто, кажется, не имел той же проблемы, что и я.

Когда я делаю что-то вроде этого

$(function(){
    $('#unique-ul').sortable({items:'li'});
});

Я ожидаю, что он "просто сработает". По большому счету, это так. Я могу перетащить любую <li> из любого списка в любой другой список и любой подписок этого <li> перетаскивается с ним.

Однако при перетаскивании кажется, что он действительно запутался в том, где его нужно отбросить. Вот пример использования 1.8.0; он отображает то же поведение.

http://jsbin.com/ewuxi3/

Все остальные ответы, которые я нашел об этом, заставляют меня поверить, что это поведение поддерживается jQuery UI; например, вот ошибка, зарегистрированная против 1.7 вложенных draggables: http://dev.jqueryui.com/ticket/4333

Я не могу найти кого-либо еще, у кого была эта проблема, поэтому я предлагаю, чтобы я делал это неправильно. Любые подсказки?

4b9b3361

Ответ 1

это происходит, потому что Sortable не знает, если вы находитесь выше вложенного <li> или того, который его содержит. Одним из решений является использование такой структуры:

<ul>
  <li><div>Item 1</div>
    <ul>
      <li><div>Subitem 1</div></li>
      <li><div>Subitem 2</div></li>
    </ul>
  </li>
  <li><div>Item 2</div></li>
  <li><div>Item 3</div></li>
</ul>

и установите опцию toleranceElement: '> div'. Я не знаю, почему он не документирован, но он там, и он сообщает Sortable учитывать только <div> при вычислении пересечений.

В случае, если вам интересно, я недавно разработал плагин, который упрощает вложенную сортировку, позволяя создавать новые вложенные списки "на лету".