Как вставлять элементы в список в определенное место, учитывая индекс элемента?

Здравствуйте, задача:

Нужно реализовать алгоритм, который переносит пункты из первого списка во второй и обратно, сортируя их по возрастанию индекса: https://jsfiddle.net/Zhuroff/tr5fdxue/ , а не просто добавляя друг под другом в том порядке, в котором они были кликнуты.

Т.е. я кликаю по кнопке элемента из второго списка и элемент переносится в первый список. То же самое, только наоборот с первым списком. И элементы должны идти строго друг за другом в том порядке, в котором они изначально расположены в html

И можно ли здесь вообще обойтись без атрибута data-index?
  • Вопрос задан
  • 88 просмотров
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
function transfer(from, to) {
  $(from).on('click', 'button', function(e) {
    const $el = $(e.target).parent();
    const index = +$el.data('index');
    const indices = $('li', to).get().map(n => +n.dataset.index);

    if (index < indices[0] || !indices.length) {
      $(to).prepend($el);
    } else if (index > indices[indices.length - 1]) {
      $(to).append($el);
    } else {
      $(`${to} [data-index="${indices.filter(n => n < index).pop()}"]`).after($el);
    }
  });
}

transfer('#parent1', '#parent2');
transfer('#parent2', '#parent1');
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы