Уменьшить оставшиеся идентификаторы после функции remove ()

1

Я использую Javascript и у меня возникают проблемы при попытке удалить несколько элементов. Каждый div имеет определенный идентификатор, например:

<div id='1'></div>
<div id='2'></div>
<div id='3'></div>
<div id='4'></div>

Каждый div имеет кнопку, которая запускает функцию remove()

document.getElementById(count).remove()

Count - это переменная, которая увеличивается всякий раз, когда я создаю новый div

Функция remove() работает, но создает пробел. Если я удаляю div с id = 2, то:

<div id='1'></div>
<div id='3'></div>
<div id='4'></div>

Но я хотел бы, чтобы оставшиеся идентификаторы могли понижаться следующим образом:

<div id='1'></div>
<div id='2'></div>
<div id='3'></div>

Я думаю, мне нужен цикл for, но я не могу понять, как это сделать

  • 4
    Зачем использовать идентификаторы? Какова цель идентификаторов? Так что вам нужно будет выбрать следующий номер, изменить идентификатор и повторить.
  • 0
    я не вижу другого способа повторения по всему списку элементов и обновления идентификаторов соответственно при каждом изменении
Показать ещё 4 комментария
Теги:

4 ответа

0

Похоже, вы должны использовать классы и ссылаться на элементы по индексу. Идентификаторы должны оставаться постоянными для ясности.

document.getElementsByClassName('my-class')[2].remove();
<div class="my-class" id="thing1">One</div>
<div class="my-class" id="thing2">Two</div>
<div class="my-class" id="thing3">Three</div>
<div class="my-class" id="thing4">Four</div>
0

Это, вероятно, будет лучше всего достигнуто с помощью jquery.

Вот рабочий код ниже:

$("div").each(function(i) {    
		$(this).attr('id', ++i);
});

$("#remove").click(function() {
  $("#2").remove();
  $("div").each(function(i) {    
		$(this).attr('id', ++i);
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id=""><span>0</span></div>
<div id=""><span>0</span></div>
<div id=""><span>0</span></div>
<div id=""><span>0</span></div>
<div id=""><span>0</span></div>

<a href="#" id="remove">remove</a>

Как это устроено

Первый $(this).attr('id', ++i); эта строка используется для добавления числа в div id. Я повторил это в функции удаления [ ("#remove").click(function() ] Это потому, что после удаления div будет изменение числа.

Это на самом деле является петлей. Без всех строк кода. Вот почему я люблю jquery :)

Имя идентификатора div находится здесь после того, как они были записаны $("#2").remove(); #2 ссылается на <div id="2"> Как и в css.

Если вы заметили, что при проверке номера сдвигаются вниз как 1, удаляется в соответствии с вашим запросом.

Чтобы использовать jquery, вы должны связать библиотеку. <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

Чистая версия Javascript

function resetId(){
    var div=document.getElementsByClassName("div")
    for(i in div){
        div[i].id=i++
    }
}

function clicked() {
	var elem = document.getElementById("1");
  elem.parentNode.removeChild(elem);
  resetId();
}
<div class="div" id="0">div</div>
<div class="div" id="1">div</div>
<div class="div" id="2">div</div>
<div class="div" id="3">div</div>

<a href="#" onclick="clicked()">Remove</a>

Как это устроено

В этом разделе ваш цикл:

for(i in div){
    div[i].id=i++
}

Этот раздел довольно просто переписывает числа 0 - 4 после того, как один был удален. Причина, по которой он начинается с 0, заключается в том, что в программировании мы начинаем считать с 0. Hay 0 - это тоже число, ребята :).

i++ - это, по сути, мини-int [ish], который увеличивается по мере того, как цикл считает количество делений.

Это var elem = document.getElementById("1"); & this elem.parentNode.removeChild(elem); Вот почему я считаю jquery более приемлемым в этой ситуации. Это немного меньше ошибок.

Наконец resetId(); Мы должны вызвать функцию, иначе это не означает, что что-то изменилось, потому что компьютеры глупы и должны быть проинформированы.

Furter Reading

https://api.jquery.com/

http://www.lucemorker.com/blog/javascript-vs-jquery-quick-overview-and-comparison

  • 0
    Спасибо за подробный ответ :) Я обязательно посмотрю эти ссылки
  • 0
    @ Sirius094 Мне нравятся глубокие сюрпризы. Ненавижу здесь код. Теперь решите это для себя. Если это исправило вашу проблему и код делает то, что вам нужно, пожалуйста, не забудьте поставить галочку :)
0

Используйте класс для каждого элемента, например так:

<div class="a" id='1'></div>
<div class="a" id='2'></div>
<div class="a" id='3'></div>
<div class="a" id='4'></div>

И вызывайте следующую функцию после каждого удаления:

function resetId(){
    var list=getElementsByClassName("a")
    for(i in list){
        list[i].id=i+1
    }
}

Я надеюсь, это поможет!

  • 0
    Так мне нужна отдельная функция для сброса идентификаторов? Я думал, что могу сбросить идентификаторы в той же функции, где я удаляю div
  • 0
    @ Sirius094 Нет, вы можете переместить этот код, где document.getElementById(count).remove()
Показать ещё 2 комментария
0

Вы можете добиться этого, переписав все идентификаторы до запуска кода

//be careful with this selector. Add parent element to selector to run in your environment.
//get all divs
var all_divs = document.querySelectorAll('div');
//rearrange their ID
for (var i=0;i<all_divs.length;i++) {
  all_divs[i].id = i+1
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню