JS Как изменить позицию задачи в Todolist?

Есть TodoList, в нём есть определённая задача, её нужно поднять или опустить в списке задач, относительно других задач, нажатием на соответствующую кнопку ( вверх или вниз ). Вопрос: как?

<ul>
    <li>
        Text
        <button>Вверх</button>
        <button>Вниз</button>
    </li>
    <li>
        Text
        <button>Вверх</button>
        <button>Вниз</button>
    </li>
    <li>...</li>
</ul>

Ответы (1 шт):

Автор решения: Александр Рогонов

Если совсем по-деревенски, то вот так

const list = [
  {name: 'task 1', position: 0},
  {name: 'task 2', position: 1},
  {name: 'task 3', position: 2},
];


const render = () => {
  const parent = $('#parent');
  let result = '';
  list.forEach((el) => {
    result += `<li>${el.name}<button class="up" onClick="clickFunc(true, ${el.position})">Вверх</button><button class="down" onClick="clickFunc(false, ${el.position})">Вниз</button></li>`;
  });
  parent.html(result);
};

const clickFunc = (up, position) => {
  if (!(up && position === 0) && !(!up && position === list.length - 1)) {
      
    const positionChange = (up) ? -1 : 1;

    list[position].position += positionChange;
    list[position + positionChange].position += positionChange * -1;
    
    list.sort((a, b) => (a.position - b.position));
    render();
  }  
};

render();
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<ul id="parent">
</ul>

→ Ссылка