В сортировке jQuery есть недокументированная опция, позволяющая определить элемент, для которого проверяется допуск: toleranceElement
.Если не установлено, весь элемент проверяется на размещение (включая вложенный список), но если он установлен, учитываются только подпункты, соответствующие селектору.
Это означает, что вам нужно изменить разметку HTMLнемного, чтобы обернуть основное содержимое элемента списка (текст элемента в вашем случае) в элемент и использовать его для проверки расположения сортировки.Это исключит вложенные <ul>
с, эффективно останавливая дрожание, которое в противном случае весьма серьезно.
HTML:
<div id="example5">
<ul>
<li ><div>Item 1</div>
<ul>
<li ><div>Item 1 1</div><ul></ul></li>
<li ><div>Item 1 2</div><ul></ul></li>
<li ><div>Item 1 3</div><ul></ul></li>
</ul>
</li>
<li ><div>Item 2</div><ul></ul></li>
<li ><div>Item 3</div><ul></ul></li>
<li ><div>Item 4</div><ul></ul></li>
</ul>
</div>
Javascript:
$("#example5 ul").sortable({
connectWith: "#example5 ul",
placeholder: "ui-state-highlight",
toleranceElement: 'div'
});
модифицированные демки здесь и здесь .
Возможно, вы также захотите поиграть с opacity
, cursorAt
и tolerance
.Взгляните на документацию .
Обратите внимание, что это не идеальное решение, если вы не удовлетворены результатами, посмотрите на использование плагина.Плагин Manuele J Sarfatti nestedSortable
выглядит как то, что вам может пригодиться: http://mjsarfatti.com/sandbox/nestedSortable/