在HTML表格中循环遍历元素

3

我正在学习Javascript,在一项学校作业中,我们需要使用循环计算2014年制作的游戏数量。

在控制台中没有返回任何内容,我错在哪里了?

var allGames = document.getElementsByTagName('td');
var array = Array.prototype.slice.call(allGames, 0)
var games14 = 0;
for (var i = 0; i < array.length; ++i) {
  if (array[i] == 2014) {
    games14++;
    console.log(games14)
  }
}
<table id="games">
  <thead>
    <tr>
      <th>Titel</th>
      <th>Genre</th>
      <th>Årstal</th>
    </tr>
  </thead>
  <tbody id="games_tbody">
    <tr class="horror">
      <td class="title">Outlast</td>
      <td>Horror</td>
      <td>2013</td>
    </tr>
    <tr class="rpg">
      <td class="title">Dragon Age: Inquisition</td>
      <td>Role-playing Game</td>
      <td>2014</td>
    </tr>
    <tr class="rpg">
      <td class="title">Skyrim</td>
      <td>Role-playing Game</td>
      <td>2011</td>
    </tr>
    <tr class="horror">
      <td class="title">Amnesia: The Dark Descent</td>
      <td>Horror</td>
      <td>2010</td>
    </tr>
    <tr class="simulator">
      <td class="title">Scania Truck Driving Simulator</td>
      <td>Simulator</td>
      <td>2012</td>
    </tr>
    <tr class="horror">
      <td class="title">Five Nights at Freddy’s</td>
      <td>Horror</td>
      <td>2014</td>
    </tr>
    <tr class="simulator">
      <td class="title">Sims 4</td>
      <td>Simulator</td>
      <td>2014</td>
    </tr>
    <tr class="rts" id="last">
      <td class="title">Warcraft III: Reign of Chaos</td>
      <td>Real-time Strategy</td>
      <td>2002</td>
    </tr>
  </tbody>
</table>


你必须遍历每一行和每一列。可能参考链接:https://dev59.com/sHA75IYBdhLWcg3w3NBe - Sri
if (array[i].textContent == '2014') { - Rayon
4个回答

6

您需要检查其文本:

var allGames = document.getElementsByTagName('td');
...
 if (array[i].innerHTML == '2014') {

或者,

if(array[i].innerText == '2014' || array[i].textContent == '2014'){

很高兴能帮到你 ;) - Bhojendra Rauniyar
@BhojendraNepal — 我的意思不是那样的。getElementsByTagName返回的是一个HTMLCollection,而不是Element。此外,请注意innerText非标准的,你应该使用textContent - Rayon
不需要循环遍历HTML表格中的元素。使用正则表达式检查我的答案。 - Yosvel Quintero
@YosvelQuintero 我同意你的观点,但我只是在严格回答原帖中的代码问题。 - Bhojendra Rauniyar

3
不需要在HTML表格中循环遍历元素。您可以简单地使用正则表达式来计算games_tbody中的所有出现次数:

var games14 = document
  .getElementById('games_tbody')
  .innerText
  .match(/2014/g)
  .length;

console.log('Games made in 2014:', games14);
<table id="games">
  <thead>
    <tr><th>Titel</th><th>Genre</th><th>Årstal</th></tr>
  </thead>
  <tbody id="games_tbody">
    <tr class="horror"><td class="title">Outlast</td><td>Horror</td><td>2013</td></tr>
    <tr class="rpg"><td class="title">Dragon Age: Inquisition</td><td>Role-playing Game</td><td>2014</td></tr>
    <tr class="rpg"><td class="title">Skyrim</td><td>Role-playing Game</td><td>2011</td></tr>
    <tr class="horror"><td class="title">Amnesia: The Dark Descent</td><td>Horror</td><td>2010</td></tr>
    <tr class="simulator"><td class="title">Scania Truck Driving Simulator</td><td>Simulator</td><td>2012</td></tr>
    <tr class="horror"><td class="title">Five Nights at Freddy’s</td><td>Horror</td><td>2014</td></tr>
    <tr class="simulator"><td class="title">Sims 4</td><td>Simulator</td><td>2014</td></tr>
    <tr class="rts" id="last"><td class="title">Warcraft III: Reign of Chaos</td><td>Real-time Strategy</td><td>2002</td></tr>
  </tbody>
</table>


1
array[i] == 2014

数组中的所有内容都将是HTML表格数据单元格元素对象。

数组中没有数字2014。

您需要从元素中读取文本内容,然后进行比较。


1

我认为这是更好的方式。

var table = document.getElementById("games");
count = 0;
for (let i = 0; row = table.rows[i]; i++) {
    if (row.cells[2].innerHTML === "2014"){
        count++;
    }
/*
    for (let j = 0; col = row.cells[j]; j++) {
        if (col.innerHTML === "2014"){
            count++;
        }
    }
*/ 
}
console.log(count);

注释代码用于检查单行上的每个项目。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接