Задать вопрос
@merelyJunior

Как изменять нумерацию div при добавлении и удалении?

Как обновлять нумерацию в div в зависимости от удаления/добавления?

Добавляем кнопкой #addItem 3 элемента:

62ea79bee6f91700455147.png
Удаляем в середине 2-й и опять добавляем +1:

62ea79f147db3582991042.png
Нужно, чтобы после любых манипуляций нумерация шла по порядку, как на первом скриншоте.

let itemInner = $("#itemInner");
var itemLength = $("#itemInner.row").length;
$("#addItem").click(function (e) {
  e.preventDefault();
  itemLength++;
  var addedRow = `
    <div class='row '>
      <div class='item-num'>${itemLength}</div>
      <button id='deleteItem'><img src="/img/icons/delete.png"></button>
    </div>
  `;
  itemInner.append(addedRow);
});
itemInner.on("click", "#deleteItem", function (e) {
  e.preventDefault();
  $(this).closest("div").remove();
  itemLength--;
});
  • Вопрос задан
  • 276 просмотров
Подписаться 1 Простой 2 комментария
Решения вопроса 2
0xD34F
@0xD34F Куратор тега JavaScript
Перестаньте заниматься ерундой и замените div'ы на ol + li.

Ну или хотя бы через css сделайте.
#itemInner {
  counter-reset: bullshit-counter;
}
.row {
  counter-increment: bullshit-counter;
}
.row::before {
  content: counter(bullshit-counter) "!!!";
}

А если всё-таки намерены продолжать говнокодить, то...
...долой счётчик itemLength, устанавливайте значения заново после каждой вставки/удаления:

itemInner.find('.item-num').text(i => i + 1);
Ответ написан
@merelyJunior Автор вопроса
let itemInner = $("#itemInner");
        var itemLength = $("#itemInner.row").length;

        $("#addItem").click(function (e) {
            e.preventDefault();
            itemLength++;
            var addedRow = `
                <div class='row '>
                <div class='item-num'>${itemLength}</div>
                <button id='deleteItem'><img src="/img/icons/delete.png"></button>
                </div>
            `;
            itemInner.append(addedRow);

            // Меняем кол-во
            $("#count").text(itemLength);
        });

        itemInner.on("click", "#deleteItem", function (e) {
            e.preventDefault();
            $(this).closest("div").remove();
            itemLength--;

            // Меняем кол-во
            $("#count").text(itemLength);
        });

        // Отслеживаем изменения кол-ва
        $("#count").bind("DOMSubtreeModified",function(){
            // Переписываем нумерацию            
            $(".item-num").each(function(i, elem) {
                $(elem).text(i+1);
            });
        });
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы