#javascript #html #html-table #local-storage
#javascript #HTML #html-таблица #local-storage
Вопрос:
Я создаю веб-сайт, который принимает два входных данных: тему и ссылку, и добавляет их в виде строки в таблицу HTML. При нажатии кнопки » » он должен выполнить необходимое. Я хотел использовать локальное хранилище, чтобы постоянно хранить эти ссылки и разделы на странице. Поскольку я новичок в концепции локального хранилища, буду признателен за любую помощь.
Это мой фрагмент кода:
let table = document.querySelector('table');
let topicInput = document.querySelector('#topic');
let linkInput = document.querySelector('#link');
function getTopic () {
return localStorage.getItem("mytopic");
}
function getLink () {
return localStorage.getItem("mylink");
}
function updatePage () {
let topic = topicInput.value;
let link = linkInput.value;
let template = `
<tr>
<td>${topic}</td>
<td>${link}</td>
<td><input type="button" id="buttonDelete" value="-" onclick="deleteRow(this)"></td>
</tr>`;
table.innerHTML = template;
}
function addFunction () {
var rTopic = document.getElementbyId("topic").value;
var rLink = document.getElementbyId("link").value;
localStorage.setItem("mytopic", rTopic);
localStorage.setItem("mylink", rLink);
updatePage();
};
<input type="text" id="topic" placeholder="Add topic" size="50">
<input type="text" id="link" placeholder="Add link" size="50">
<button id="buttonAdd" onclick="addFunction()"> </button>
Комментарии:
1. Я не думаю, что вы можете использовать JavaScript или HTML для доступа к локальному хранилищу. Вы должны использовать AJAX (это js, отправляющий данные на серверную часть), а затем серверную программу (php, deno …) для извлечения некоторых данных, которые вы можете отобразить (через js) в HTML. Полезно ли это?
2. И каким образом ваш код работает не так, как ожидалось? Вы получаете сообщение об ошибке в консоли браузера?
3. @JonNezbit: JavaScript действительно можно использовать для доступа
localStorage
.4. @David Я думаю, что он имел в виду локальное хранилище в виде файла на сервере, но, возможно, я ошибаюсь в этом
5. Вы неправильно написали это ->
getElementbyId
, это должно бытьgetElementById
(это словоBy
)
Ответ №1:
Основная идея заключается в том, что вам нужно будет сохранить массив строк в локальном хранилище и проанализировать его при загрузке страницы. Вы добавляете в массив при добавлении новых строк.
const table = document.querySelector('table tbody');
const topicInput = document.querySelector('#topic');
const linkInput = document.querySelector('#link');
// grab the records from local storage.
const records = JSON.parse(localStorage.getItem("data") || '[]');
const rowIndex = 0;
function addRecord(topic, link) {
const template = `
<tr>
<td>${topic}</td>
<td>${link}</td>
<td><input type="button" class="buttonDelete" value="-"></td>
</tr>`;
table.innerHTML = template;
}
function addFunction() {
const rTopic = document.getElementById("topic").value;
const rLink = document.getElementById("link").value;
// add to the array
records.push({
topic: rTopic,
link: rLink
});
updateLocalStorage();
addRecord(rTopic, rLink);
};
function updateLocalStorage() {
// save updated records array
localStorage.setItem("data", JSON.stringify(records));
}
table.addEventListener("click", function (evt) {
const delButton = evt.target.closest(".buttonDelete");
if (delButton) {
const row = delButton.closest("tr");
const index = Array.from(row.parentNode.children).indexOf(row);
records.splice(index, 1);
row.remove();
updateLocalStorage();
}
})
// loop over the records in localstorage.
records.forEach(function(record) {
addRecord(record.topic, record.link);
});
<input type="text" id="topic" placeholder="Add topic" size="50">
<input type="text" id="link" placeholder="Add link" size="50">
<button id="buttonAdd" onclick="addFunction()"> </button>
<table>
<thead>
<tr>
<th>Column 1</th>
<th>Column 2</th>
</tr>
</thead>
<tbody></tbody>
</table>
И, как я уже говорил ранее, localstorage не является постоянным. Его можно легко очистить, и он также ограничен объемом данных, которые он может хранить.
Комментарии:
1. Это сработало, спасибо! Можете ли вы помочь мне написать программу для обновления локального хранилища до removeItem, когда мы нажимаем кнопку удаления.