в функции остановки добавить это
$("ul.sortable li:has(ul):has(li)").addClass("ArrowOpen");
в качестве первой строки и удалите
$("ul.sortable li:has(ul)").addClass("ArrowOpen");
из функции изменения
ПРИМЕЧАНИЕ:
что это всего лишь обходной путь и что стрелки исчезают при перетаскивании элементов, а когда вы их бросаете, стрелки появляются там, где и должны.
функция "change" вызывается несколько раз, если я прав, каждый раз, когда вы перетаскиваете ее из одного элемента в другой, не отпуская.
Надеюсь, это поможет!
Скрипка http://jsfiddle.net/envy/qbxWd/5/
EDIT
еще лучший подход, добавить следующие две строки в качестве первых строк в функции "stop"
$("ul.sortable li").removeClass("ArrowOpen");
$("ul.sortable li:has(ul):has(li)").addClass("ArrowOpen");
и удалите все из функции «change», это даст желаемый эффект и не будет вызывать «removeClass» каждый раз, когда вы перемещаете элемент, не отпуская его.
EDIT2
Если вы хотите, чтобы он работал со многими вложенными сортируемыми объектами, я предлагаю другой вариант, который использует рекурсивную функцию для применения «ArrowOpen» ко всем li, имеющим ul с child li.
Демонстрация скрипки
EDIT3
Вы можете сделать этот шаг еще дальше, избегая того, чтобы свернутые узлы теряли свой класс.
Добавить not ('. Collapsed') в оператор добавления класса.
например,
$ ("ul.sortable li: has (ul): has (li)> div> a: not (.ArrowOpen-closed)"). AddClass ('ArrowOpen');