【发布时间】:2021-11-28 02:34:15
【问题描述】:
(在以下网站上找到 https://javascript.info/indexeddb#object-store) 此 JavaScript 函数使用 indexeddb 将带有数据的书籍添加到列表中。这些功能还允许用户删除列表中的所有数据以及显示数据。
<!doctype html>
<script src="https://cdn.jsdelivr.net/npm/idb@3.0.2/build/idb.min.js"></script>
<button onclick="addBook()">Add a book</button>
<button onclick="clearBooks()">Clear books</button>
<p>Books list:</p>
<ul id="listElem"></ul>
<script>
let db;
init();
async function init() {
db = await idb.openDb('booksDb', 1, db => {
db.createObjectStore('books', {keyPath: 'name'});
});
list();
}
async function list() {
let tx = db.transaction('books');
let bookStore = tx.objectStore('books');
let books = await bookStore.getAll();
if (books.length) {
listElem.innerHTML = books.map(book => `<li>
name: ${book.name}, price: ${book.price}
</li>`).join('');
} else {
listElem.innerHTML = '<li>No books yet. Please add books.</li>'
}
}
async function clearBooks() {
let tx = db.transaction('books', 'readwrite');
await tx.objectStore('books').clear();
await list();
}
async function addBook() {
let name = prompt("Book name?");
let price = +prompt("Book price?");
let tx = db.transaction('books', 'readwrite');
try {
await tx.objectStore('books').add({name, price});
await list();
} catch(err) {
if (err.name == 'ConstraintError') {
alert("Such book exists already");
await addBook();
} else {
throw err;
}
}
}
window.addEventListener('unhandledrejection', event => {
alert("Error: " + event.reason.message);
});
</script>
从这个脚本中,我如何能够修改它,使其只删除添加到列表中的最后一个元素?例如,如果列表是
name: Star wars, price: 20
name: LOTR, price: 30
name: Harry Potter, price: 15
最后一个条目,哈利波特,会被删除吗?
这是我使用removeChild() 的尝试,但是这个实现会删除所有数据
$('#lastUser').on('click', function() {
var user = $('#search').val();
async function clearlastUser() {
let tx = db.transaction('books', 'readwrite');
await tx.objectStore('books').parentNode.removeChild(user);
await list();
}
});
【问题讨论】:
标签: javascript indexeddb