javascript - 一旦更改了从中提取的数组,如何在 Javascript 中重置数据属性的值?
问题描述
这是我的代码。除了 deleteButton 事件侦听器之外,这一切都按预期工作。它将从页面中删除 book 元素并将其从 myLibrary 数组中删除,但是如果我在删除了之前的元素之一之后尝试删除最后一个元素,那么即使它也不会从 myLibrary 数组中删除已从 DOM 中删除。现在,我目前使用与 myLibrary 数组中对象的索引相对应的 dataset 属性使用名为 data-index 的数据属性,但我想知道是否可以将该属性重置为 myLibrary 的新索引删除另一个元素后的数组。我觉得这会解决我的问题,但我已经尝试了所有我能想到的解决方案,包括重新编写整个代码,但仍然找不到解决方案。已经好几天了,我
const bookShelf = document.querySelector('.books-tab');
const addBookButton = document.getElementById('bookButton');
const buttonTab = document.querySelector('.button-tab');
const formElement = document.getElementById('formElement');
let myLibrary = [];
let libraryQueue = [];
function Book(title, author, pageCount, readYet){
this.title = title,
this.author = author,
this.pageCount = pageCount,
this.readYet = readYet,
this.info = function(){
console.log(title, author, pageCount, readYet);
}
}
addBookButton.addEventListener('click', function() {
let book = new Book();
book.title = document.getElementById("title").value;
book.author = document.getElementById("author").value;
book.pageCount = document.getElementById("pages").value;
myLibrary.push(book);
libraryQueue.push(book);
displayBooks();
formElement.reset();
libraryQueue.length = 0;
})
function displayBooks(){
let addBook;
let addAuthor;
let deleteButton;
for(let i = 0; i < libraryQueue.length; i++){
addBook = document.createElement('div');
addAuthor = document.createElement('p');
deleteButton = document.createElement('button');
addBook.textContent = `"${libraryQueue[i]['title']}"`;
addAuthor.textContent = `-${libraryQueue[i]['author']}`;
deleteButton.textContent = `Delete`;
bookShelf.appendChild(addBook);
addBook.appendChild(addAuthor);
addBook.appendChild(deleteButton);
}
for(let i = 0; i < myLibrary.length; i++){
addBook.dataset.index = i;
}
deleteButton.addEventListener('click', function(){
myLibrary.splice(addBook.dataset.index, 1);
addBook.remove();
delete addBook.dataset.index;
console.log(myLibrary);
})
}
解决方案
推荐阅读
- android - 在这里 api 的任何地方都找不到许可证密钥
- google-bigquery - 在 bigquery 上进行查询,这会消耗大量时间
- php - 更新 MySQL 后,为空的“浮点”字段添加了 0(零)而不是 null
- sql - sql order by 不正确的语法
- c# - 为什么我不能使用 `WTSVirtualChannelQuery` 返回的句柄?
- php - 有没有办法检查具有特定 SessionId 的 Laravel Session 是否存在
- git - 如何在 Yocto Project 的帮助下为 Banana Pi M1+ 构建镜像文件?
- css - 如何在没有 wp_head() 的主题上包含带有 wp_enqueue_style() 的 CSS 文件
- java - 如何拆分字符串并包含拆分器?
- python - 可以将列表的可变位置保存为自己的值吗?