Есть страница где создаются отдельные блоки, каждый блок является постом с уникальным ID + подключена библиотека SortableJS чтобы посты можно было сортировать drag and drop.
На выходе получаю массив с порядком блоков такого вида
var sort_position = '122|124|132|133|131|98|100|102|103|104|105|106|108|107'; // массив
var sort_id = sort_position.split('|'); //формат массива (122,124,...)
Чтобы сохранить значение в базу мне нужно выдернуть каждый ID присвоить ему порядковый номер который задан в массиве и засунуть индекс в input в конкретном посте и дальше отдать ajax
структура html примерно такая
- Длина массива не известна
- data-id так же не известны
<input id="sort_position"> // в этот инпут выгружаю массив для наглядности изменений
<ul>
<li data-id="122"> <input class="sort_index"></li>
<li data-id="124"><input class="sort_index"></li>
<li data-id="132"><input class="sort_index"></li>
</ul>
Сложность именно в написании вложенных циклов который пройдётся по массиву соберёт индексы, следующим циклом переберёт элементы
<li data-id="132">
сопоставит с результатом первого цикла if 132=132 и запишет в инпут index у которого родитель с id 132 .
А если содержимое измениться, то цикл повториться вновь и перезапишет все индексы.
Возможно есть проще решение но именно с текущим array у меня нет проблем с обновлением значений при перетаскивании блоков.
если просто получать значение индекса через elem.index(), то сложность с обновлением этого индекса при перетаскивании.
3 дня вожусь с этим.
...