首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何修复Javascript中的代码以避免HTML中的重复元素?

如何修复Javascript中的代码以避免HTML中的重复元素?
EN

Stack Overflow用户
提问于 2021-03-24 12:03:49
回答 2查看 65关注 0票数 2

index.html

代码语言:javascript
复制
 <!--FIRST PIZZA---FIRST CHUNK OF HTML CODE-->
        <div class="column-pizza-1">
          <a href="">
            <div class="pizza-item--img">
              <img src="" id="pizza-img-1" />
            </div>
            <div class="pizza-item--add" id="selected-1">Add</div>
          </a>
          <div class="pizza-item--price" id="pizza-price-1">Rs. --</div>
          <div class="pizza-item--name" id="pizza-name-1">--</div>
          <div class="pizza-item--desc" id="pizza-desc-1">--</div>
        </div>
<!--SECOND PIZZA---SECOND CHUNK OF HTML CODE-->
            <div class="column-pizza-2">
              <a href="">
                <div class="pizza-item--img">
                  <img src="" id="pizza-img-2" />
                </div>
                <div class="pizza-item--add" id="selected-2">Add</div>
              </a>
              <div class="pizza-item--price" id="pizza-price-2">Rs. --</div>
              <div class="pizza-item--name" id="pizza-name-2">--</div>
              <div class="pizza-item--desc" id="pizza-desc-2">--</div>
              <div class="pizza-item--sizes" id="pizza-size-2">
            </div>

pizzas.json

代码语言:javascript
复制
[
  {
    "id": 1,
    "name": "Tandoori Paneer",
    "img": "/images/pizza.png",
    "price": 200,
    "sizes": [0, 100, 200],
    "description": "Spiced paneer, Onion, Green Capsicum & Red Paprika in Tandoori Sauce",
    "cheese": [0, 100, 0]
  },
  {
    "id": 2,
    "name": "Veggie Supreme",
    "img": "images/pizza.png",
    "price": 250,
    "sizes": [0, 100, 200],
    "description": "Black Olives, Green Capsicum, Mushroom, Onion, Red Paprika, Sweet Corn",
    "cheese": [0, 100, 0]
  }
]

index.js

代码语言:javascript
复制
//FIRST PIZZA - loading json data and showing it on index.html page
fetch("pizzas.json").then((response) =>
  response.json().then((data) => {
    //console.log(data[0].name);
    document.querySelector("#pizza-img-1").src = data[0].img;
    document.querySelector("#pizza-name-1").innerHTML = data[0].name;
    document.querySelector(
      "#pizza-price-1"
    ).innerHTML = `Rs ${data[0].price.toFixed(2)}`;
    document.querySelector("#pizza-desc-1").innerHTML = data[0].description;
  })
);
//SECOND PIZZA
fetch("pizzas.json").then((response) =>
  response.json().then((data) => {
    //console.log(data[0].name);
    document.querySelector("#pizza-img-2").src = data[1].img;
    document.querySelector("#pizza-name-2").innerHTML = data[1].name;
    document.querySelector(
      "#pizza-price-2"
    ).innerHTML = `Rs ${data[1].price.toFixed(2)}`;
    document.querySelector("#pizza-desc-2").innerHTML = data[1].description;
  })
);

我的怀疑:

正如您在上面的代码中所看到的,我希望显示两个比萨饼项目的详细信息,它们的详细信息存储在json文件中,我使用将数据从json加载到HTML。对于每个比萨,我都在index.html中创建了一个不太好的元素。让我们假设将来我想显示50个比萨的详细信息,所以这意味着在html中创建50块代码。

请有人告诉我,如何使用HTML代码中的一个块,并多次使用它来使用香草javascript创建更多的比萨饼项目。

我的看法:

我考虑将json数据存储为全局变量,然后使用onload()ready()加载数据,但我不确定如何实现。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-03-24 12:23:03

您可以在JavaScript中创建一个HTML,并使用它根据JSON文件中的数据生成多个<div>

使用,您可以轻松地与一起使用

代码语言:javascript
复制
fetch("https://api.jsonbin.io/b/605b2c5aaee69516ee8a8866/2").then((response) =>
  response.json().then((data) => {

    let jsonSize = data.length;

    let htmlContent = '';
    for (let i = 0; i < jsonSize; i++) {
      let id = data[i].id;
      let name = data[i].name;
      let img = data[i].img;
      let price = data[i].price;
      let sizes = data[i].sizes;
      let description = data[i].description;
      let cheese = data[i].cheese;

      htmlContent += `
           <div class="column-pizza">
            <a href="">
              <div class="pizza-item--img">
                <img src="${img}" id="pizza-img-${i}" />
              </div>
              <div class="pizza-item--add" id="selected-${i}">Add</div>
            </a>
            <div class="pizza-item--price" id="pizza-price-${i}">₹${price}</div>
            <div class="pizza-item--name" id="pizza-name-${i}">${name}</div>
  <div class="pizza-item--desc" id="pizza-desc-${i}">${description}</div>
</div>`;
    }
    document.querySelector("#root").innerHTML = htmlContent;

  })
);
代码语言:javascript
复制
.column-pizza {
  height: auto;
  width: 50vv;
}


.pizza-item--add,
.pizza-item--price {
  border: none;
  color: white;
  padding: 15px 32px;
  text-align: center;
  text-decoration: none;
  display: inline-block;
  font-size: 16px;
}

.pizza-item--add {
  background-color: #4CAF50;
  /* Green */
}

.pizza-item--price {
  background-color: #333;
  /* Gray */
}
代码语言:javascript
复制
<div id="root"></div>

PS-不要有比萨饼图像占位符,因此使用一些随机和️图像。

票数 2
EN

Stack Overflow用户

发布于 2021-03-24 14:31:27

这是一个演示

  • 您可以使用异步/等待来获取json
  • ,使用映射将数组转换为标记
  • 使用innerHTML来追加一串html内容

代码语言:javascript
复制
document.addEventListener('DOMContentLoaded', async ev => {
  const res = await fetch('https://jsonplaceholder.typicode.com/photos')
  const data = await res.json()
  const photos = data.slice(0, 100)


  const appEl = document.querySelector('#app')
  appEl.innerHTML = photos.map((photo, index) => {
    return `<div class="photo" style="transition-delay: ${index / 10}s">
                  <div class="image">
                    <a href="${photo.url}"><img src="${photo.thumbnailUrl}" alt="thumbnailUrl" /></a>
                  </div>
                  <div class="title">
                    <a href="${photo.url}">${photo.title}</a>
                  </div>
                </div>`
  }).join('')
  setTimeout(() => {
    appEl.classList.add('loaded')
  }, 0)
}, false)
代码语言:javascript
复制
#app {
  display: flex;
  flex-flow: row wrap;
  justify-content: space-evenly;
  align-items: center;
  position: relative;
}

.photo {
  width: 200px;
  height: 200px;
  position: absolute;
  top: 0;
  left: 0;
  transform: translate(-100vw, -100vh);
}

#app.loaded .photo {
  position: static;
  transition: all ease 1s;
  transform: translate(0, 0);
}

.image {
  text-align: center;
  transition: transform ease 1s;
}

.image:hover {
  transform: scale(1.1);
}

.title a {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  width: 100%;
  display: inline-block;
  text-align: center;
  font-family: 'Gill Sans', 'Gill Sans MT', Calibri, 'Trebuchet MS', sans-serif;
  color: midnightblue;
  text-decoration: none;
}

.title a:hover {
  color: dodgerblue;
}
代码语言:javascript
复制
<div id="app"></div>

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66780641

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档