Looping through table cell ids in Javascript

时间:2016-02-16 12:28:40

标签: javascript css html5 for-loop

I have created table cells in html that have ids that increment by 1 for example: cell1, cell2, cell3, ......, cell100.

What I would like to do is loop through and get reference to each of these cells using a for loop because referencing them one by one won't be good pratice and will require alot of codes of line, instead of this;

 var cell1 = document.getElementById('cell1');
 var cell2 = document.getElementById('cell2');
 var cell3 = document.getElementById('cell3');
 ......
 var cell100 = document.getElementById('cell100');

Is it possible to do something like this?

  for (i = 0; i<=100; i++) {
    var cell+i = document.getElementById("cell"+i);
    // then I can call individual cells and assign tasks to them something along the lines of;    
    cell1.addEventListener('input',function(){}
    cell5.background = '#f5f5f5'
    cell55.innerHTML = 'I am cell 55'
    etc..                     


   } 

EDITED:

Incase it might be useful, I have 1 table that contains many cells of which some have ids and some don't. I would only like to reference the ones that do have ids.

6 个答案:

答案 0 :(得分:1)

您可以将document.querySelectorAll与通配符

一起使用
var slice = Array.prorotype.slice;
var selection = document.querySelectorAll("[id^=cell]");
slice.call(selection).forEach(function(item, index){
  // here item is the table row and index is the iteration number of forEach
  // to get the id
  var id = item.id;

  //to get the numerical value in id
  var number_in_id = item.id.match(/\d+/g)[0];
})

document.querySelectorAll("[id^=cell]")选择其ID开头的所有元素cell如果您想使其特定于您添加{t}的表{t}

答案 1 :(得分:0)

可能是你在寻找这个

var grid = document.getElementById("grid");//grid is the id of the table
for (var i = 1, row; row = grid.rows[i]; i++)
    row.cells[0].textContent = "";//content of the starts with row 1..2..3 and so one than cell[0] or cell[1] and so on.

答案 2 :(得分:0)

是的,这很容易,见下文。

var cells = [];
for (var i = 0; i <= 100; i++) {
  cells[i] = document.getElementById("cell"+i);
  // do stuff....
  if( cells[55] ) {
    cells[55].innerHTML = 'I am cell 55';
  }
}

答案 3 :(得分:0)

但是,使用课程是很好的实践;

在你的循环的基础上,你可以这样做以获得当前元素,但是如果你的循环比元素id数字序列的数量更长,那么它将返回错误。

var Cell=document.getElementById("cell"+i)
//you've your DOM element in the variable called Cell now
//the one error you did is in the variable name
//you used the + operator in the variable name;

这相当于具有id&#34; cell0&#34;的元素。当它是循环的第一个执行时间时。不太优雅,你还有很多其他方法可以做同样的事情。

答案 4 :(得分:0)

假设您有一个ID为myTable的表格。

拿着桌子, var theTable = document.getElementById('myTable');

要获得所有<td>你可以做的事,

var cells = theTable.querySelectorAll('td');

然后执行循环部分,

for(var i = 0; i < cells.length; i++){
       if(cells[i].id && cells[i].id.indexOf('cell') != -1){ //added to get only the significant cells
               //do your stuff
              cells[i].addEventListener(function(){});
              cells[i].innerHTML = 'Something';
           }

}

答案 5 :(得分:0)

我很懒,不想手工编写任何表格,所以我做了演示2

  • 一个“接受多个行和列

  • 的表单
  • 可以创建<tr>并附加到表格(0到100行)

  • 可以创建<td>并附加到<tr>(0到100列)

  • 为每个<tr><td>

  • 分配一个唯一ID
  • ID模式允许人类读者找到<tr><td> s

  • 每个单元格中都会显示<td>的每个ID。

  • 还有两个数组,一个用于<tr>rowX),另一个用于<td>colY)。有许多强大的methods for Array并拥有这两个数组甚至可以制作two-dimensional array

关于OP的请求,特别是关于桌子上的单元格的id(完整或部分),我知道你有一个预先制作的表格,所以我将采取使其成为可能的关键线演示2 指定ID:

row.setAttribute('id', 'r' + r);// Each row will have a numbered id (ex. r0 is row 1)


col.setAttribute('id', 'r' + r + 'c' + c);// Each cell will have a numbered id representing it's location (ex. r3c0 is located on row 4 column 1)

演示1

此片段是对前面提到的代码的改编:

  function oddRows() {

  var rows = document.querySelectorAll('tr');
  // rows is a NodeList (an array-like object).

  // We can covert this NodeList into an Array.
  var rowArray = Array.prototype.slice.call(rows);

  //Either way, NodeList or Array should be iterated through a for loop (most common way to reiterate)
  for (var i = 0; i < rowArray.length; i++) {

    if (i % 2 === 1) {
      console.log(i);
      var odd = rowArray[i];
      odd.style.display = "none";

      //This filters and removes all odd numbered rows    
    }
  }
  return false;
}

function evenCols() {
  var cols = document.querySelectorAll('td');
  var colArray = Array.prototype.slice.call(cols);
  for (var j = 0; j < colArray.length; j++) {

    if (j % 2 === 0) {
      console.log(j);
      var even = colArray[j];
      even.style.backgroundColor = "red";

      //This filters even numbered <td> and colors the background red.    
    }
  }
  return false;
}
td {
  border: 2px inset #777;
}
button {
  margin: 20px 5px 10px;
}
<button id="btn1" onclick="oddRows();">Remove Odd Rows</button>
<button id="btn2" onclick="evenCols();">Mark Even Cols</button>

<table id="t1">
  <tr id="r0" class="row">
    <td id="r0c0" class="col">r0c0</td>
    <td id="r0c1" class="col">r0c1</td>
    <td id="r0c2" class="col">r0c2</td>
    <td id="r0c3" class="col">r0c3</td>
    <td id="r0c4" class="col">r0c4</td>
    <td id="r0c5" class="col">r0c5</td>
    <td id="r0c6" class="col">r0c6</td>
    <td id="r0c7" class="col">r0c7</td>
    <td id="r0c8" class="col">r0c8</td>
    <td id="r0c9" class="col">r0c9</td>
  </tr>
  <tr id="r1" class="row">
    <td id="r1c0" class="col">r1c0</td>
    <td id="r1c1" class="col">r1c1</td>
    <td id="r1c2" class="col">r1c2</td>
    <td id="r1c3" class="col">r1c3</td>
    <td id="r1c4" class="col">r1c4</td>
    <td id="r1c5" class="col">r1c5</td>
    <td id="r1c6" class="col">r1c6</td>
    <td id="r1c7" class="col">r1c7</td>
    <td id="r1c8" class="col">r1c8</td>
    <td id="r1c9" class="col">r1c9</td>
  </tr>
  <tr id="r2" class="row">
    <td id="r2c0" class="col">r2c0</td>
    <td id="r2c1" class="col">r2c1</td>
    <td id="r2c2" class="col">r2c2</td>
    <td id="r2c3" class="col">r2c3</td>
    <td id="r2c4" class="col">r2c4</td>
    <td id="r2c5" class="col">r2c5</td>
    <td id="r2c6" class="col">r2c6</td>
    <td id="r2c7" class="col">r2c7</td>
    <td id="r2c8" class="col">r2c8</td>
    <td id="r2c9" class="col">r2c9</td>
  </tr>
  <tr id="r3" class="row">
    <td id="r3c0" class="col">r3c0</td>
    <td id="r3c1" class="col">r3c1</td>
    <td id="r3c2" class="col">r3c2</td>
    <td id="r3c3" class="col">r3c3</td>
    <td id="r3c4" class="col">r3c4</td>
    <td id="r3c5" class="col">r3c5</td>
    <td id="r3c6" class="col">r3c6</td>
    <td id="r3c7" class="col">r3c7</td>
    <td id="r3c8" class="col">r3c8</td>
    <td id="r3c9" class="col">r3c9</td>
  </tr>
  <tr id="r4" class="row">
    <td id="r4c0" class="col">r4c0</td>
    <td id="r4c1" class="col">r4c1</td>
    <td id="r4c2" class="col">r4c2</td>
    <td id="r4c3" class="col">r4c3</td>
    <td id="r4c4" class="col">r4c4</td>
    <td id="r4c5" class="col">r4c5</td>
    <td id="r4c6" class="col">r4c6</td>
    <td id="r4c7" class="col">r4c7</td>
    <td id="r4c8" class="col">r4c8</td>
    <td id="r4c9" class="col">r4c9</td>
  </tr>
  <tr id="r5" class="row">
    <td id="r5c0" class="col">r5c0</td>
    <td id="r5c1" class="col">r5c1</td>
    <td id="r5c2" class="col">r5c2</td>
    <td id="r5c3" class="col">r5c3</td>
    <td id="r5c4" class="col">r5c4</td>
    <td id="r5c5" class="col">r5c5</td>
    <td id="r5c6" class="col">r5c6</td>
    <td id="r5c7" class="col">r5c7</td>
    <td id="r5c8" class="col">r5c8</td>
    <td id="r5c9" class="col">r5c9</td>
  </tr>
  <tr id="r6" class="row">
    <td id="r6c0" class="col">r6c0</td>
    <td id="r6c1" class="col">r6c1</td>
    <td id="r6c2" class="col">r6c2</td>
    <td id="r6c3" class="col">r6c3</td>
    <td id="r6c4" class="col">r6c4</td>
    <td id="r6c5" class="col">r6c5</td>
    <td id="r6c6" class="col">r6c6</td>
    <td id="r6c7" class="col">r6c7</td>
    <td id="r6c8" class="col">r6c8</td>
    <td id="r6c9" class="col">r6c9</td>
  </tr>
  <tr id="r7" class="row">
    <td id="r7c0" class="col">r7c0</td>
    <td id="r7c1" class="col">r7c1</td>
    <td id="r7c2" class="col">r7c2</td>
    <td id="r7c3" class="col">r7c3</td>
    <td id="r7c4" class="col">r7c4</td>
    <td id="r7c5" class="col">r7c5</td>
    <td id="r7c6" class="col">r7c6</td>
    <td id="r7c7" class="col">r7c7</td>
    <td id="r7c8" class="col">r7c8</td>
    <td id="r7c9" class="col">r7c9</td>
  </tr>
  <tr id="r8" class="row">
    <td id="r8c0" class="col">r8c0</td>
    <td id="r8c1" class="col">r8c1</td>
    <td id="r8c2" class="col">r8c2</td>
    <td id="r8c3" class="col">r8c3</td>
    <td id="r8c4" class="col">r8c4</td>
    <td id="r8c5" class="col">r8c5</td>
    <td id="r8c6" class="col">r8c6</td>
    <td id="r8c7" class="col">r8c7</td>
    <td id="r8c8" class="col">r8c8</td>
    <td id="r8c9" class="col">r8c9</td>
  </tr>
  <tr id="r9" class="row">
    <td id="r9c0" class="col">r9c0</td>
    <td id="r9c1" class="col">r9c1</td>
    <td id="r9c2" class="col">r9c2</td>
    <td id="r9c3" class="col">r9c3</td>
    <td id="r9c4" class="col">r9c4</td>
    <td id="r9c5" class="col">r9c5</td>
    <td id="r9c6" class="col">r9c6</td>
    <td id="r9c7" class="col">r9c7</td>
    <td id="r9c8" class="col">r9c8</td>
    <td id="r9c9" class="col">r9c9</td>
  </tr>
</table>

如果ID看起来太沉重和繁琐,您可以使用伪选择器nth-childnth-of-type选择表格上的任何单元格。

示例:

  • 目标:*您希望第5行的第3个<td>有红色文字。

  • CSS:

     table tbody tr:nth-of-type(5) td:nth-of-type(3) { color: red; }
    
  • jQuery:

    $("table tbody tr:nth-of-type(5) td:nth-of-type(3)").css('color', 'red');
    
  • JavaScript:

    var tgt = document.querySelector("table tbody tr:nth-of-type(5) td:nth-of-type(3)");
    tgt.style.color = "red";
    

*假设目标元素的表格为<tbody>

演示2

fieldset {
  width: 50vw;
  height: 55px;
  margin: 10px auto;
  padding: 3px;
}
input {
  width: 40px;
  height: 20px;
  margin: 5px 10px;
}
table {
  table-layout: fixed;
  border-collapse: collapse;
  border: 3px ridge #666;
  width: 50vw;
  height: 50vh;
  margin: 20px auto;
}
td {
  height: 20px;
  width: 20px;
  border: 1px inset grey;
  font-size: 8px;
}
<fieldset>
  <legend>Rows &amp; Columns</legend>
  <input id="rows" type="number" min="0" max="100" />
  <input id="cols" type="number" min="0" max="100" />
  <button id="btn1">Build</button>
</fieldset>

<table id="t1"></table>
<script>
  var t1 = document.getElementById('t1');
var rows = document.getElementById('rows');
var cols = document.getElementById('cols');
var btn1 = document.getElementById('btn1');

btn1.addEventListener('click', function(e) {
      var R = rows.value;
      var C = cols.value;
      var rowX = [];
      var colY = [];

      for (var r = 0; r < R; r++) {
        var row = document.createElement('tr');
        row.setAttribute('id', 'r' + r);// Each row will have a numbered id (ex. r0 is row 1)
        row.classList.add('row');
        rowX.push(row);
        t1.appendChild(row)
        for (var c = 0; c < C; c++) {
          var col = document.createElement('td');
          col.setAttribute('id', 'r' + r + 'c' + c);// Each cell will have a numbered id representing it's location (ex. r3c0 is located on row 4 column 1)
          col.innerHTML = col.id;
          col.classList.add('col');
          colY.push(col);
          row.appendChild(col);
        }
      }
    }, false);
</script>