Javascript可以';无法获取元素的内容

Javascript可以';无法获取元素的内容,javascript,Javascript,我已经使用Javascript编写代码,根据这些值格式化网页的以下部分: <div class="col-md-auto mx-auto"> <h3>Average price</h3> <p id="avgPrice"></p> <br> <div>Average change</div>

我已经使用Javascript编写代码,根据这些值格式化网页的以下部分:

<div class="col-md-auto mx-auto">
        <h3>Average price</h3>
        <p id="avgPrice"></p>
        <br>
        <div>Average change</div>
        <div class="change" id = "avgChange"></div>
      </div>

      <div class="col-md-auto mx-auto">
        <h3>Max price</h3>
        <p id="maxPrice"></p>
        <br>
        <div>Max change</div>
        <div class="change" id="maxChange"></div>
      </div>
问题是我定义var变化的那一行。下面一行的console.log输出显示了我想要的文本,请参见下图:

但无论我尝试什么,都无法获取此div中包含的文本。我尝试了元素[I].value、.textContent、.innerHTML、.innerText、parseFloat(元素[I].innerHTML)。。。但当我尝试记录它们时,它们都返回“undefined”。如果有任何建议,我将不胜感激

console.log的输出(元素[i],元素[i].innerHTML)

.innerHTML应该是正确的,如下所示:。我所做的只是复制您的脚本,让它在页面加载时运行(因为看起来您在那里有类似的东西,我假设您的函数在数据完全被调用后被调用),然后进行更改 var change=parseFloat(元素[i].innerHTML)

document.addEventListener('DOMContentLoaded', function() {
  var elements = document.getElementsByClassName("change");
  for (var i = 0; i < elements.length; i++) {
    var change = parseFloat(elements[i].innerHTML); //this is where I put innerHTML
    console.log(change);
    if (change > 0) {
      elements[i].innerHTML = "▴ " + change + "%";
      elements[i].classList.add("text-success");
    }
    if (change < 0) {
      elements[i].innerHTML = "▾ " + change + "%";
      elements[i].classList.add("text-danger");
    }
  }
}, false);
document.addEventListener('DOMContentLoaded',function(){
var elements=document.getElementsByClassName(“变更”);
对于(var i=0;i0){
元素[i]。innerHTML=”▴ " + 变动+“%”;
元素[i].classList.add(“文本成功”);
}
如果(更改<0){
元素[i]。innerHTML=”▾ “+变更+”%”;
元素[i].classList.add(“文本危险”);
}
}
},假);

试试这个:
var change=Number(elements[i].innerHTML | | 0);
谢谢你的回复,我试过了,但是它为每个值记录了“0”,而不是第一个屏幕快照中的值。你如何调用这个函数?请使用snippet函数更新你的问题,生成一个Is
getData()
进行AJAX调用?@paulf all和all听起来好像changeFormatter调用得太快了。如果
getData
中有回调功能,请在那里调用它。如果没有,请在超时
setTimeout(()=>changeFormatter(),0)中尝试调用它
如果运行此操作后得到NaN,则在运行changeFormatter()之前,可能无法完全加载数据。如果是这种情况,请尝试在getData()末尾调用changeFormatter函数,而不是在事件侦听器中。感谢您的回答,这个JSFIDLE证明了在我自己的代码中调用changeFormatter函数太早了
window.addEventListener('load', (event) => {
  console.log('page is fully loaded');
  getData(); //gets values from database and adds them to HMTL
  changeFormatter();
});
document.addEventListener('DOMContentLoaded', function() {
  var elements = document.getElementsByClassName("change");
  for (var i = 0; i < elements.length; i++) {
    var change = parseFloat(elements[i].innerHTML); //this is where I put innerHTML
    console.log(change);
    if (change > 0) {
      elements[i].innerHTML = "▴ " + change + "%";
      elements[i].classList.add("text-success");
    }
    if (change < 0) {
      elements[i].innerHTML = "▾ " + change + "%";
      elements[i].classList.add("text-danger");
    }
  }
}, false);