【问题标题】:update one list instead of duplicating it更新一个列表而不是复制它
【发布时间】:2020-11-09 02:00:24
【问题描述】:

我有一个名称列表,每个名称都分配了点,每次我单击与该名称相关的按钮时,它都会添加一个点,然后在按下 rank 按钮时将它们排在 html 文件中,一切正常但是当我进行更改并再次单击排名时,它会添加另一个列表而不是更新现有列表:

let characters = [
   {name: document.getElementById("name 1").textContent, points: 0},
   {name: document.getElementById("name 2").textContent, points: 0},
   {name: document.getElementById("name 3").textContent, points: 0}
];

function choice (button) {
   const buttonCharacterObject = characters.find(obj => obj.name === button.textContent);
   buttonCharacterObject.points += 1;
   const ranking = characters.sort((a, b) => (a.points < b.points ? 1 : -1));
   console.log(ranking);
}

function rank() {
   characters.forEach(function (character) {   
      document.getElementById('rank').innerHTML += '<li>' + character.name + '</li>
})}

<button id="name 1" onclick="choice(this)">Martin</button>
<button id="name 2" onclick="choice(this)">Sam</button>
<button id="name 3" onclick="choice(this)">John</button>
<button onclick="rank()">Rank Characters</button>
<ol id="rank">
    
</ol>

【问题讨论】:

  • “它添加了另一个列表”不只是在&lt;ol id="rank"&gt; 列表中推送另一个&lt;li&gt; 元素吗?
  • @Jan Stránský 是的,很抱歉没有很好地解释它,它是:1- 名称 1、2- 名称 2、3- 名称 3、4- 名称 1、5- 名称 2、6- 名称3
  • 然后它只是按照您要求程序执行的操作。在rank()函数内部,清除ol之前characters.forEach的内容
  • 我该怎么做?
  • .innerHTML=""

标签: javascript html arrays function html-lists


【解决方案1】:

正如下面问题所讨论的,问题在于列表项正在添加,而现有项仍然存在。解决方案是事先清除列表:

function rank() {
   var el = document.getElementById('rank')
   el.innerHTML = ""
   characters.forEach(function (character) {   
      el.innerHTML += '<li>' + character.name + '</li>
})}

【讨论】:

  • 是的,我对此很陌生,所以我猜不出来,如果我这样写代码可以吗?虽然你的更整洁:function rank() { document.getElementById('rank').innerHTML = ""; characters.forEach(function (character) { document.getElementById('rank').innerHTML += '&lt;li&gt;' + character.name + '&lt;/li&gt;'; })}
  • 取决于ok的定义 :-) 代码有效,所以可能没问题。从 我的 的角度来看,这是不行的。重复代码 (document.getElementById('rank')) 容易出错且更难维护(例如,从 'rank' 更改 id,您需要在 2 个地方更改它,而“el-approach”仅在一个地方)
  • 好的,我会按照你的建议做,非常感谢你的帮助
  • 为了清楚起见,我只是在这里写了我的意见(并强调这是我的意见)。虽然我担心这是一个好意见 :-) 这不是教条
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-17
  • 1970-01-01
  • 1970-01-01
  • 2018-02-08
  • 2022-11-30
  • 2018-11-01
相关资源
最近更新 更多