在JS中创建的元素上的textContent无法正常工作?

时间:2019-10-21 13:58:17

标签: javascript json

我正在执行学校任务,但是最近我遇到了textContent问题。我导入一个JSON文件,并将数据用作foreach。 .js文件中没有错误,但我收到typeError:即使我使用JSON文件中的元素定义了属性,也无法将属性'textContent'设置为undefined?

当我用textContent删除两行时,我收到一个类似appendChild属性的错误:无法读取null的属性'appendChild'。

如果我在我的forEach中登录coffee.name,我确实会得到正确的名字。我猜我只有一个名字,因为由于错误不断,forEach无法再循环。

我的js代码:

    import './style.css';
    import data from './assets/data/coffees.json';

  const init = () => {
 console.log(data);
 createPriceList(data);
};

const createPriceList = coffees => {
const ul = document.querySelector('prices__list');
console.log(coffees);

coffees.coffees.forEach(coffee => {
 if (coffee.plantbased === true) {
  const price = document.createElement('li');
  price.classList.add('price');
  const a = document.createElement('a').classList.add('price__button');
  const spanWrapper = document.createElement('span').classList.add('price__button__wrapper');
  const spanName = document.createElement('span').classList.add('price__button__name');
  const spanAmount = document.createElement('span').classList.add('price__button__amount');
  const spanPlus = document.createElement('span').classList.add('price__button__plus');

  spanName.textContent = coffee.name;
  spanAmount.textContent = coffee.prices.medium;

  ul.appendChild(price);
  price.appendChild(a);
  a.appendChild(spanWrapper);
  spanWrapper.appendChild(spanName);
  spanWrapper.appendChild(spanAmount);
  a.appendChild(spanPlus);
  }
  });
 };

init();

这是我要创建的HTML(注释部分,其余部分已定义):

<section class="prices highlight spaced">
  <h2 class="visually-hidden">Price list</h2>
  <ul class="prices__list">
  <!--<li class="price">
        <a class="price__button">
          <span class="price__button__wrapper">
            <span class="price__button__name">Oat Latte</span>
            <span class="price__button__amount">&euro; 2</span>
          </span>
          <span class="price__button__plus">+</span>
        </a>
      </li> -->
  </ul>
</section>

1 个答案:

答案 0 :(得分:0)

您正在尝试将方法链接在一起,例如:

const test = document.createElement('span').classList.add('price__button__name');
console.log(test.classList);

但是,您必须先创建元素,然后才能使用其classList或其他属性:

const test = document.createElement('span');
test.classList.add('price__button__name');
console.log(test.classList);