如何在for循环中获取元素ID?

时间:2020-10-07 16:50:23

标签: javascript firebase firebase-realtime-database createelement

您好,我有以下代码:

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数据库中检索值,并每2秒钟将它们写入div中。因此,我使用for循环创建的div数与数据库中的值一样多。从新调用该函数时,应删除所有具有相同ID的div元素,以使它们在下次运行时不会重复。

但是这些div元素没有被删除,并且出现错误消息:

未捕获(承诺)TypeError:元素为空

有人可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

元素ID必须是唯一的,因此无法在一次调用中获取具有相同ID的所有元素。

您可以尝试将div设置为具有通用标签,并使用getElementsByTagName收集所有内容以供删除。

这篇文章可能是有用的参考:Javascript: getElementById vs getElementsById (both works on different pages)