Как получить идентификатор элемента в цикле for?

Здравствуйте, у меня есть следующий код:

function updateData() {

  var element = document.getElementById('elementId');
  element.remove(); ** //Here i want to remove my elements**

  return firebase.database().ref(varurl3).child('UserCount/count').once('value').then(function(snapshot) {
    var username = snapshot.val();


    for (var i = 1; i <= username; i++) {

      var ref = firebase.database().ref(varurl3).child('Users').child(i).child('User');
      ref.once('value', function(snapshot) {
        var changedPost = snapshot.val();
        var log = document.createElement('div');
        log.setAttribute('id', 'elementId');
        log.style.height = '75px';
        log.style.width = '300px';
        log.style.overflow = 'auto';
        log.style.border = '1px solid #666';
        log.style.backgroundColor = '#ccc';
        log.style.padding = '8px';
        log.style.position = 'relative';
        log.style.left = '1400px';
        log.style.top = '300px';
        log.style.margin = '10px';
        log.textContent = changedPost;
        document.body.appendChild(log)
      });
    }
  });
}

(async function looper() {
  while (true) { // forever
    await updateData();
    await delay(2000);
  }
})(); // execute looper

Моя функция вызывается каждые 2 секунды для извлечения значений из моей базы данных firebase и записи их в div каждые 2 секунды. Поэтому я создаю с помощью цикла for столько div, сколько у меня есть значений в моей базе данных. При повторном вызове функции из новой все элементы div с одинаковым идентификатором должны быть удалены, чтобы они не дублировались при следующем запуске.

Но эти элементы div не удаляются, и я получаю сообщение об ошибке:

Uncaught (в обещании) TypeError: элемент имеет значение null

Может ли кто-нибудь помочь мне, как я могу решить эту проблему?


person Nils    schedule 07.10.2020    source источник
comment
Вы используете один и тот же идентификатор элемента для каждого добавляемого элемента, что не имеет смысла. Идентификаторы элементов должны быть уникальными.   -  person Pointy    schedule 07.10.2020
comment
Также getElementById() может вернуть null; ваш код просто должен проверить это условие.   -  person Pointy    schedule 07.10.2020
comment
Моя функция вызывается каждые 2 секунды для извлечения значений из моей базы данных firebase и записи их в div каждые 2 секунды. Это звучит невероятно расточительно. Рассматривали ли вы возможность использования on() вместо once(), чтобы Firebase активно вызывал ваш код, когда что-то менялось, вместо того, чтобы запрашивать обновления?   -  person Frank van Puffelen    schedule 07.10.2020


Ответы (1)


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

Вы можете попробовать установить для своих div общий тег и использовать getElementsByTagName, чтобы собрать их все для удаления.

Этот пост может быть полезным справочным материалом: Javascript: getElementById vs getElementsById ( оба работают на разных страницах)

person Beth Crane    schedule 07.10.2020