【问题标题】:for loop only displays one item and the last item in the array objectfor 循环只显示数组对象中的一项和最后一项
【发布时间】:2021-08-31 11:54:59
【问题描述】:

我有一个循环遍历这个数组对象的 for 循环。但是,有一些事情我不确定并且不明白。第一个问题是为什么循环只显示数组中的一项而不是全部?另一个问题是它只显示数组中的最后一项?我以为它会显示第一项,但事实并非如此。感谢您对这些问题的任何解释,谢谢!

Javascript:

const rosterItems = [
  {
    img: '<img src="images/bryce.jpg" class="artist-image" alt="#">',
    resident: '<p>Resident: Bryce Methven</p>',
    bio: '<p>' +
         'Lorem ipsum dolor sit amet consectetur adipisicing elit. ' +
         'Culpa ex expedita doloremque, sunt eveniet, laboriosam totam at, debitis earum fugit eligendi quae. ' +
         'Perferendis ratione cum ipsum molestiae perspiciatis tempore aut?' +
         'Lorem ipsum dolor sit amet consectetur adipisicing elit. ' +
         'Culpa ex expedita doloremque, sunt eveniet, laboriosam totam at, debitis earum fugit eligendi quae. ' +
         'Perferendis ratione cum ipsum molestiae perspiciatis tempore aut?' +
         '</p>'
  },
  {
    img: '<img src="images/haptic.jpg" class="artist-image" alt="#">',
    resident: '<p>Resident: Haptic</p>',
    bio: '<p>' +
         'Haptic ipsum dolor sit amet consectetur adipisicing elit. ' +
         'Culpa ex expedita doloremque, sunt eveniet, laboriosam totam at, debitis earum fugit eligendi quae. ' +
         'Perferendis ratione cum ipsum molestiae perspiciatis tempore aut?' +
         '</p>'
  },
  {
    img: '<img src="images/haptic.jpg" class="artist-image" alt="#">',
    resident: '<p>Resident: DJ Test</p>',
    bio: '<p>' +
         'Haptic ipsum dolor sit amet consectetur adipisicing elit. ' +
         'Culpa ex expedita doloremque, sunt eveniet, laboriosam totam at, debitis earum fugit eligendi quae. ' +
         'Perferendis ratione cum ipsum molestiae perspiciatis tempore aut?' +
         '</p>'
  }
]

const rosterArtist = document.querySelector(".artist")
const rosterBio = document.querySelector(".bio")

for (let i = 0; i < rosterItems.length; i++) {

  let leftCol = `<div class="item">
                  ${rosterItems[i].img}
                  ${rosterItems[i].resident}
                  </div>`

  let rightCol = rosterItems[i].bio
    
  rosterArtist.innerHTML = leftCol
  rosterBio.innerHTML = rightCol

}

HTML:

<div class="roster-gallery">
    <div class="artist">
    </div>
    <div class="artist-bio">
         <div class="bio">
         </div>
         <div class="pagination">
              <button class="previous">Previous</button>
              <button class="next">Next</button>
         </div>
     </div>
</div>

【问题讨论】:

  • 你正在覆盖元素的内容而不是添加它们:.innerHTML = ... -> .innerHTML += ....insertAdjacentHTML() 优于 .innerHTML,你应该切换到那个)
  • 哦,我现在明白了,谢谢!为什么.insertAdjacentHTML() 优于.innerHTML?我会调查的。
  • .innerHTML 覆盖元素的完整内容,因此迫使浏览器解析并重绘其中的所有内容。它还删除了可能具有事件侦听器的元素。然后,您以一堆无法访问的事件处理程序结束。 .insertAdjacentHTML()(及其其他版本)仅解析您调用它们的内容。他们只添加新的东西,不会弄乱现有的东西。没有丢失的事件处理程序,浏览器只需要绘制新的东西,...

标签: javascript arrays for-loop object


【解决方案1】:

您的 Html 应该是(您错过了事件并且 for 循环对您不起作用)

<div class="roster-gallery">
<div class="artist">
</div>
<div class="artist-bio">
     <div class="bio">
     </div>
     <div class="pagination">
          <button class="previous" onclick="previous()">Previous</button>
          <button class="next"  onclick="next()">Next</button>
     </div>
 </div>

你的javascript应该是

    const rosterItems = [
  {
    img: '<img src="images/bryce.jpg" class="artist-image" alt="#">',
    resident: '<p>Resident: Bryce Methven</p>',
    bio: '<p>' +
         'Lorem ipsum dolor sit amet consectetur adipisicing elit. ' +
         'Culpa ex expedita doloremque, sunt eveniet, laboriosam totam at, debitis earum fugit eligendi quae. ' +
         'Perferendis ratione cum ipsum molestiae perspiciatis tempore aut?' +
         'Lorem ipsum dolor sit amet consectetur adipisicing elit. ' +
         'Culpa ex expedita doloremque, sunt eveniet, laboriosam totam at, debitis earum fugit eligendi quae. ' +
         'Perferendis ratione cum ipsum molestiae perspiciatis tempore aut?' +
         '</p>'
  },
  {
    img: '<img src="images/haptic.jpg" class="artist-image" alt="#">',
    resident: '<p>Resident: Haptic</p>',
    bio: '<p>' +
         'Haptic ipsum dolor sit amet consectetur adipisicing elit. ' +
         'Culpa ex expedita doloremque, sunt eveniet, laboriosam totam at, debitis earum fugit eligendi quae. ' +
         'Perferendis ratione cum ipsum molestiae perspiciatis tempore aut?' +
         '</p>'
  },
  {
    img: '<img src="images/haptic.jpg" class="artist-image" alt="#">',
    resident: '<p>Resident: DJ Test</p>',
    bio: '<p>' +
         'Haptic ipsum dolor sit amet consectetur adipisicing elit. ' +
         'Culpa ex expedita doloremque, sunt eveniet, laboriosam totam at, debitis earum fugit eligendi quae. ' +
         'Perferendis ratione cum ipsum molestiae perspiciatis tempore aut?' +
         '</p>'
  }
]

const rosterArtist = document.querySelector(".artist")
const rosterBio = document.querySelector(".bio")

const maxPos = rosterItems.length;
let currentPos = 0; 

function previous(){
    if(currentPos>0){
    currentPos-=1;
  }
  showData();
}
function next(){
    if(currentPos<maxPos){
    currentPos+=1;
  }
  showData();
}
showData();
function showData(){
let leftCol = `<div class="item">
                  ${rosterItems[currentPos].img}
                  ${rosterItems[currentPos].resident}
                  </div>`

  let rightCol = rosterItems[currentPos].bio
    
  rosterArtist.innerHTML = leftCol
  rosterBio.innerHTML = rightCol
}

【讨论】:

  • @Raidzz 这里是你的小提琴jsfiddle.net/factedu/zwxbf42c/8
  • 非常感谢您抽出宝贵时间来做这件事!我只是在寻找一些关于为什么循环显示数组中的最后一项的解释,但感谢您向我展示如何为我的画廊执行下一步!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-02
相关资源
最近更新 更多