ну вы же знаете ID предыдущей (под которую ставите текущую).... и по этому ID в столбце display_after_id ищите запись.
было: B(после A)->D(после B), вы делаете: B(после A)->C(после B)->D(после C)
"В таком случае при создании новой категории её display_after_id = 0" - это странно. должен быть id предыдущей созданой дирректории или NULL, если она единственная на этом уровне.
После перетаскивания меняются 2 записи (параметр: display_after_id): текущая и следующая.
@andreyqin, @KorsaR-ZN, Коллеги, методы POST/PUT - универсальнее (объем информации, типы данных, манипуляции с перечнем полей) при изменении любой записи и поэтому лучше и правильнее, чем GET в любом случае. (например, можно одним запросом менять массив объектов!)
стоп! речь идет не о непосредственном чтении из буфера (когда захочется JS), а только во время вставки (Ctrl+V) юзером (или записи в буфер информации во время копирования - Ctrl+C).... или я не о том?