#javascript #local-storage
#javascript #локальное хранилище
Вопрос:
Я пытаюсь сохранить элементы проверенного списка в массив и сохранить в localStorage, это отлично работает, если вы проверяете первый элемент в строке по порядку. Но если вы проверите любой другой элемент, кроме первого, скажем, второй или третий элемент, только первый элемент будет сохранен в локальном хранилище. Мне нужно иметь возможность сохранять любой элемент, на который был нажат щелчок, а не всегда позицию [0] элементов списка.
Приведенный ниже код сохраняет все в позицию [0] массива. Таким образом, щелчок по первому элементу будет работать, поскольку он находится в позиции [0], но щелчок по второму элементу также сохраняет позицию [0] вместо позиции [1].
const savedChecks;
const myArr = [];
savedChecks = document.querySelector('.saved-list-item').innerHTML;
myArr.push(savedChecks);
localStorage.setItem('checkItems' new Date().getTime(), JSON.stringify(myArr);
Итак, я попробовал это, но этот код дает тот же результат, сохраняет только в позиции [0], но ожидал, что с тех пор, как я добавил [0], но подумал, что, возможно, перебор клавиш отобразит все в позиции [0]:
localStorage.setItem('checkItems' new Date().getTime(), JSON.stringify([...myArr][0]);
Я перебираю localStorage и отображаю результат следующим образом:
for(let i = 0; i < localStorage.length; i ) {
if(localStorage !== null) {
document.querySelector('#savedList').innerHTML = JSON.parse(localStorage.getItem(localStorage.key(i)));
}
}
Комментарии:
1. вы объявили savedChecks и myArr как константы. вы не сможете инициализировать их позже.
Ответ №1:
Используется querySelectorAll()
для получения всех элементов, соответствующих селектору.
let savedItems = document.querySelectorAll('.saved-list-item');
let myArr = Array.from(savedItems).map(el => el.innerHTML);
localStorage.setItem('checkItems' new Date().getTime(), JSON.stringify(myArr);
И убедитесь, что селектор соответствует только отмеченным элементам. Вы можете использовать прослушиватели событий для добавления и удаления другого класса для элементов, когда они отмечены и сняты, затем выберите это.
Комментарии:
1. Этот код почти выполнил свою работу, он сохраняет правильный отмеченный элемент, но также сохраняет и непроверенные элементы (сохраняет весь список). Я думаю, что это в моем коде html / EJS, я буду работать с ним, чтобы посмотреть, смогу ли я заставить ваш код работать.
Ответ №2:
Прочитав полезные комментарии здесь, я вижу, что я делал неправильно, и вот окончательное решение для решения этой проблемы, если кто-нибудь еще когда-нибудь увидит эту проблему. Я пометил изменения.
let savedChecks;
let myArr = [];
savedChecks = document.querySelectorAll('.saved-list-item'); /*<--Here use querySelectorAll as stated by others in the comments*/
savedChecks = savedChecks[i].innerHTML; /*<-- Here loop through the savedChecks */
myArr.push(savedChecks);
localStorage.setItem('checkItems' new Date().getTime(), JSON.stringify(myArr));
Комментарии:
1. Где цикл? Где вы проверяете, проверен ли элемент?