Почему моя переменная localStorage.getItem возвращает «объект HTMLSpanElement»?

У меня есть скрипт в хорошем рабочем состоянии, который проверяет, был ли назначен посетителю код купона, но хотел добавить функциональность, которая извлекает код купона, который им был назначен, и отображает его. Оба полагаются на свойство местное хранилище. Проблема, с которой я сталкиваюсь, заключается в том, что когда я отображаю сохраненное значение, оно возвращает [object HTMLSpanElement] вместо значения, которое должно быть присвоено.

Практически все, что я нашел по этой проблеме, связано с областью действия, но я не понимаю, как у меня возникла проблема с областью действия ... даже пытался сделать переменные глобальными в области видимости, и это, похоже, ничего не дало.

Вот JS:

if (localStorage.getItem("visited") != "true"){
    localStorage.setItem("visited","true"); 
    var codeValue = document.getElementById("code");
    localStorage.setItem("code",codeValue);
} 
else { 
    var savedCode = localStorage.getItem("code");
    document.getElementById("message").innerHTML = "You've already been assigned coupon code " + savedCode;
}

Вот соответствующий HTML:

<span id = "message">Your coupon code is: <span id = "code">CODE1234</span></span>

Когда вы возвращаетесь на страницу после того, как уже посетили ее, я ожидаю, что текст диапазона отобразится You've already been assigned coupon code CODE1234, но вместо этого он возвращается You've already been assigned coupon code [object HTMLSpanElement]

Обратите внимание, что часть сценария была чем-то, что я создал раньше и запустил в производство, и я в основном использую эту функциональность. Раньше, если getItem("visited") != "true" возвращал false, появлялось всплывающее окно с предупреждением о том, что вам уже дали код, а затем перенаправляли вас на другую страницу.

var codeValue = document.getElementById("code"); — это не значение, это элемент.
Ry- 10.04.2019 15:58
document.getElementById("code") возвращает HTMLSpanElement. Если вы хотите текст, получите textContent. Если вам нужен его HTML, используйте innerHTML.
Heretic Monkey 10.04.2019 15:59

Вероятно, дубликат javascript getElementById и преобразовать его в строку

Heretic Monkey 10.04.2019 16:06
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
3
247
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вы сохраняете сам элемент (который является объектом) в местное хранилище. Вы должны сохранить текст элемента.

Изменять

var codeValue = document.getElementById("code");

К

var codeValue = document.getElementById("code").textContent;

Пожалуйста, обрати внимание: Согласно Window.localStorage

The keys and the values are always strings (note that, as with objects, integer keys will be automatically converted to strings).

Вы не можете хранить HTMLElement в localStorage. Он сохраняет результат toString() в localStorage.

Heretic Monkey 10.04.2019 16:06

@HereticMonkey, вы правы, обновил ответ, спасибо :)

Mamun 10.04.2019 16:12

Да, это была проблема. Спасибо!

adrysdale 10.04.2019 16:17

вам нужно получить доступ к тексту внутри элемента, здесь вы сохраняете элемент html внутри локального хранилища. изменить код для доступа к тексту

document.getElementById('code').innerText

Другие вопросы по теме