您好,我有以下代码:
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:元素为空
有人可以帮我解决这个问题吗?
答案 0 :(得分:0)
元素ID必须是唯一的,因此无法在一次调用中获取具有相同ID的所有元素。
您可以尝试将div设置为具有通用标签,并使用getElementsByTagName收集所有内容以供删除。
这篇文章可能是有用的参考:Javascript: getElementById vs getElementsById (both works on different pages)