循环遍历HTML表格中的元素

时间:2016-10-03 06:53:03

标签: javascript html arrays loops dom

我正在学习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)
  }
}
&#13;
<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>
&#13;
&#13;
&#13;

4 个答案:

答案 0 :(得分:5)

您需要检查其文字:

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

OR,

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

答案 1 :(得分:3)

无需在HTML表格中循环遍历元素。您只需使用regular expressions计算games_tbody中的所有匹配项:

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

console.log('Games made in 2014:', games14);
&#13;
<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>
&#13;
&#13;
&#13;

答案 2 :(得分:1)

array[i] == 2014

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

数组中的任何内容都不是2014年的数字。

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

答案 3 :(得分:0)

我认为这是一种更好的方法。

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);

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