Невозможно установить свойство 'className' для null и id внутри идентификатора

1

Я получаю ошибку Cannot set property 'className' of null при попытке установить имя класса в JS. Мой JS выглядит так:

setInterval(function(){
  $.get('/price',function(data) {
      document.title = '($${data.price}) The Price';
      document.getElementById("p4").innerHTML = '$${data.change}';
      document.getElementById("p4").className = "increase";
      document.getElementById("p5").className = "triangle-down";
  });
}, 30000);

Строка в HTML:

<h1 class="decrease" id="p4">$5<i class="triangle-up" id="p5"></i></h1>

Я всегда получаю ту же ошибку. Однако, если я прокомментирую строку ниже, она работает:

document.getElementById("p4").innerHTML = '$${data.change}';

Что я здесь делаю неправильно?

  • 0
    Какие библиотеки вы используете?
  • 0
    Почему document.getElementById("p4").className = "increase" вместо $("#p4").addClass("increase") ?
Показать ещё 7 комментариев
Теги:

4 ответа

0

Вы меняете внутри своего тега h1:

document.getElementById("p4").innerHTML = '$${data.change}';

что является результатом:

'$${data.change}'

убедитесь, что указанная выше переменная перенастраивает следующий html: (edit: я означает следующий формат)

<h1 class="decrease" id="p4">$5<i class="triangle-up" id="p5"></i></h1>
  • 0
    p4 не проблема, p5 есть, и поскольку p5 находится внутри p4, он теряется после .innerHTML, который я изменил, не так ли?
0

Объяснение внутри кода

setInterval(function(){
  $.get('/price',function(data) {
      document.title = '($${data.price}) The Price';
      // Step by step:    
      // You change innerHTML of id=p4, but your new html might not 
      // contents the <i class="triangle-up" id="p5"></i>
      document.getElementById("p4").innerHTML = '$${data.change}';

      // you changing class of p4 this is ok
      document.getElementById("p4").className = "increase"

      // you are trying to change class of p5, but two lines above you
      // replaced it by $${data.change} that probably don't contains 
      // div with id=p5 and it looks like there is no more div id=p5 on the page
      // that also explains why everything is ok if you comment this line
      document.getElementById("p5").className = "triangle-down"
  });
}, 30000);
-2

Возможно, у вас есть недостающие полуколоны. в конце двух назначений className?

  • 0
    это была опечатка. извиняюсь
-3

Можно попробовать:

document.getElementById("p4").classList.remove('decrease');
document.getElementById("p4").classList.add('increase');
document.getElementById("p5").classList.remove('triangle-up');
document.getElementById("p5").classList.add('triangle-down');

Ещё вопросы

Сообщество Overcoder
Наверх
Меню