#javascript #arrays #object #local-storage
#javascript #массивы #объект #локальное хранилище
Вопрос:
Я создаю планировщик задач на рабочий день. Я могу извлекать свои данные из localstoage. Теперь я пытаюсь выполнить итерацию по массиву объектов, и если этот идентификатор совпадает, извлеките эти данные. У каждого объекта есть 2 свойства: час и описание. Я использую hour в качестве уникального идентификатора. Когда я извлекаю данные из localstorage, они дублируют данные объекта таргетинга в каждой текстовой области.
Как мне просто отобразить его в текстовой области только с соответствующим идентификатором?
Вот область кода, которая, как я думаю, вызывает у меня проблему
for ( var i = 0; i < timeBlockArr.length; i ) {
var timeBlockId = $(".time-block").attr("id");
if(timeBlockArr[i].hour === timeBlockId) {
$(".time-block .description").val(timeBlockArr[i].description);
}
}
и скрипка js рабочего проекта https://jsfiddle.net/j9hepL2b /
Ответ №1:
Вы перебираете свои объекты localStorage, поэтому на значение timeBlockId
элемента localStorage, который вы обрабатываете в данный момент, не влияет.
В этой строке $(".time-block")
находится массив ваших элементов с time-block
классом.
var timeBlockId = $(".time-block").attr("id");
Но .attr()
метод jQuery возвращает только идентификатор первого элемента в этом массиве. Из документов:
Метод .attr() получает значение атрибута только для первого элемента в сопоставленном наборе.
Поэтому: console.log(timeBlockId)
всегда "hour-9"
.
Если я понимаю, что вы пытаетесь сделать, вам вообще не нужно if
это утверждение. Попробуйте это:
for ( var i = 0; i < timeBlockArr.length; i ) {
const selector = '#' timeBlockArr[i].hour ' .description';
$(selector).val(timeBlockArr[i].description);
}
Т.е. Вы выбираете элемент с классом .description
(textarea), который является потомком элемента с идентификатором #hour-9
и т.д., #hour-10
и изменяете значение этого текстового поля с .val()
помощью .