Неперехваченная ошибка типа: не удается прочитать свойство ‘classList’ с нулевым значением в HTMLSpanElement.развернуть

#javascript #html

#javascript #HTML

Вопрос:

Здесь я сталкиваюсь с небольшой проблемой с моим кодом javascript. Я следовал этому руководству для чего-то довольно простого (обычно): https://www.youtube.com/watch?v=kQW-MXriUIUamp;t=417samp;ab_channel=CodewithAniaKubów#JavaScriptGames

Что я сделал: Конечно, я адаптировал HTML, предложенный в руководстве, к визуальному результату, который я хотел получить, но я позаботился о том, чтобы сохранить правильные атрибуты class и id для моих разных элементов.

С другой стороны, я действительно использовал тот же код в JS, чтобы убедиться, что все соответствует руководству.

Вот часть HTML, которая нас интересует:

 <div class="item">
          <a href="contact.html">
            <img src="img/services/service-5.jpg" alt="service" />
          </a>
          <div class="expandMoreContent" id="showMoreContent5">
            <p>
              Lorem ipsum dolor sit amet consectetur,
              adipisicing elit. Enim, suscipit. Eos tempora dolorem commodi
              consectetur consequatur repellat nam, sunt repudiandae maiores
              modi velit, in possimus nesciunt quas, dicta ullam ex.
            </p>
          </div>
          <div class="expandMoreHolder">
            <span
              expand-more
              data-hidetext="Less..."
              data-showtext="...Read More"
              data-target="ShowMoreContent5"
              class="btn-expand-more"
              >...Read more</span
            >
          </div>
          <a href="contact.html" class="btn-light">
            <i class="fas fa-clipboard"></i> Request a quote
          </a>
        </div>
 

И вот мой javascript для желаемого эффекта:

 // Show and hide more or less text services

document.addEventListener('DOMContentLoaded', () => {
const expandsMore = document.querySelectorAll('[expand-more]')

function expand() {
const showContent = document.getElementById(this.dataset.target)
  if(showContent.classList.contains('expand-more'))) { // Apparently the error is on this line, but I can't figure it out...
    this.innerHTML=this.dataset.showText
}else {
  this.innerHTML=this.dataset.hideText

}
showContent.classList.toggle('expand-active')
}
expandsMore.forEach(expandMore => {
  expandMore.addEventListener('click', expand)
})

})
 

Чего я хочу :
Поэтому моя цель — создать текстовый переключатель в разделе service div на моем веб-сайте.

Что я получаю :

Проблема в том, что я не получаю никакого результата, кроме этой ошибки в моей консоли: Неперехваченная ошибка типа: не удается прочитать свойство ‘classList’ с нулевым значением в HTMLSpanElement.expand. Я думаю, что что-то застряло и не позволяет добавить класс «expand-active» к моим HTML-элементам в строку, которую я прокомментировал в JS, но не могу понять, что именно это такое. Я использовал тот же код из руководства в начале. И это очень недавнее обновление, поэтому отслеживание устаревания исключается 🙂

Я благодарю вас за любое предложение, которое вы могли бы мне предложить!

Комментарии:

1. Извините, я забыл поздороваться… Итак, привет, ребята! 😀

2. classList of null означает, что элемент, который вы пытаетесь отредактировать, не существует. Попробуйте console.log(showContent) after const showContent = document.getElementById(this.dataset.target) , чтобы узнать, действительно ли ваш элемент существует.

Ответ №1:

причина в том, что в html <div class="expandMoreContent" id="showMoreContent5"> первая буква вашего идентификатора находится в нижнем регистре

в javascript запрос элемента начинается с прописной буквы

data-target="ShowMoreContent5"

const showContent = document.getElementById(this.dataset.target)

измените любой из них, он будет работать.

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

if(showContent.classList.contains('expand-more'))) { // Apparently the error is on this line, but I can't figure it out...

Комментарии:

1. О боже! Я занимаюсь этим со вчерашнего дня! Теперь все работает нормально, спасибо! Редактировать: бесполезных правых скобок нет в моем исходном коде. Я не знаю, откуда оно взялось, но все в порядке. Еще раз спасибо! 🙂