?
您可以考虑使用jQuery。使用jQuery,它非常简单,可能看起来像这样:
1 2 3 4 5
| $('#mytab1 tr').each(function(){
$(this).find('td').each(function(){
//do your stuff, you can use $(this) to get current cell
})
}) |
-
无法使用jquery ... company不允许使用。不要问为什么。
-
那是一个疯狂的政策。您总是可以将所需的相关功能从jQuery复制粘贴到自己的应用程序代码中。除非有禁止在线使用他人代码的政策,否则您就不会在这里。
-
@朱迪:不同意"疯狂的政策"。...有很多原因不使用jQuery
-
JQuery是我一段时间以来没有使用过的东西,乍一看似乎很复杂而且不易掌握。但是我认为那只是因为我没有太多使用它。
-
禁止使用JQuery的另一个原因是针对嵌入式网站,例如我使用的嵌入式WiFi芯片整个网站只有250Kb。它挤满了所有图像。
-
jQuery没用,需要2-3个函数。与PHP一起编码时,它很慢且令人困惑。
-
他们可能不允许这样做,因为它使用了由他们控制的外部资源。它还增加了额外的开销,并且可能比默认功能要慢...它们还将语言从用户友好型易于阅读的语言更改为大多数情况下的简写风格的语言,而不是全部。 jQuery更易于阅读,例如带有回调的foreach函数-比每次为每个代码编写相同的重复代码都短。
1 2 3 4 5 6 7 8 9 10
| var table=document.getElementById("mytab1");
var r=0; //start counting rows in table
while(row=table.rows[r++])
{
var c=0; //start counting columns in row
while(cell=row.cells[c++])
{
cell.innerHTML='[R'+r+'C'+c+']'; // do sth with cell
}
} |
1 2 3 4 5 6 7 8 9 10 11
| <table id="mytab1">
<tr>
<td>A1</td><td>A2</td><td>A3</td>
</tr>
<tr>
<td>B1</td><td>B2</td><td>B3</td>
</tr>
<tr>
<td>C1</td><td>C2</td><td>C3</td>
</tr>
</table> |
在每次遍历while循环中,循环r / c迭代器都会增加,并且集合中的新行/单元对象将分配给行/单元变量。当集合中没有更多的行/单元时,将false分配给行/单元变量,并在while循环停止(退出)时进行迭代。
-
在上一篇文章中:while(cell = row [r] .cells 应该是row.cells ,row是当前对象,第s个代码的示例:mycoldata = cell.innerHTML
尝试
1 2 3 4 5 6 7
| for (let row of mytab1.rows)
{
for(let cell of row.cells)
{
let val = cell.innerText; // your code below
}
} |
1 2 3 4 5 6 7
| for (let row of mytab1.rows)
{
for(let cell of row.cells)
{
console.log(cell.innerText)
}
} |
1 2 3 4 5 6 7 8 9 10
| <table name="mytab" id="mytab1">
<tr>
<td>col1 Val1</td>
<td>col2 Val2</td>
</tr>
<tr>
<td>col1 Val3</td>
<td>col2 Val4</td>
</tr>
</table> |
1 2 3 4 5 6 7
| for ( let [i,row] of [...mytab1.rows].entries() )
{
for( let [j,cell] of [...row.cells].entries() )
{
console.log(`[${i},${j}] = ${cell.innerText}`)
}
} |
1 2 3 4 5 6 7 8 9 10
| <table name="mytab" id="mytab1">
<tr>
<td>col1 Val1</td>
<td>col2 Val2</td>
</tr>
<tr>
<td>col1 Val3</td>
<td>col2 Val4</td>
</tr>
</table> |
更好的解决方案:使用Javascript的本机Array.from()并将HTMLCollection对象转换为数组,然后可以使用标准数组函数。
1 2 3 4 5 6 7 8
| var t = document.getElementById('mytab1');
if(t) {
Array.from(t.rows).forEach((tr, row_ind) => {
Array.from(tr.cells).forEach((cell, col_ind) => {
console.log('Value at row/col [' + row_ind + ',' + col_ind + '] = ' + cell.textContent);
});
});
} |
您也可以引用tr.rowIndex和cell.colIndex,而不是使用row_ind和col_ind。
我更喜欢这种方法,而不是前两个投票最多的答案,因为它不会使全局变量i,j,row和col杂乱无章,因此它提供了干净的模块化代码,不会有任何副作用(或引发皮棉/编译器警告)...而没有其他库(例如jquery)。
如果您要求它在Javascript的旧版本(ES2015之前)中运行,则可以将Array.from进行填充。
如果您想要一种具有功能性的样式,例如:
1 2 3 4
| const table = document.getElementById("mytab1");
const cells = table.rows.toArray()
.flatMap(row => row.cells.toArray())
.map(cell => cell.innerHTML); //["col1 Val1","col2 Val2","col1 Val3","col2 Val4"] |
您可以修改HTMLCollection的原型对象(允许以类似于C#中的扩展方法的方式使用),并在其中嵌入一个将集合转换为数组的函数,从而允许使用具有上述样式(例如linq样式)的高阶函数。 C#):
1 2 3 4 5 6 7
| Object.defineProperty(HTMLCollection.prototype,"toArray", {
value: function toArray() {
return Array.prototype.slice.call(this, 0);
},
writable: true,
configurable: true
}); |
-
Uncaught TypeError:无法读取未定义的toArray属性->这是我在尝试此解决方案时得到的。
-
奇怪。我再次尝试,它奏效了。不过,我无法重现您指出的错误。也许问题出在浏览器上。我使用Edge和IE进行了测试,但两者均无法正常工作。 Chrome,Firefox和Safari正常运行。
-
我也用铬。
-
这也对我有用。 Object.defineProperty显然必须先于其余代码,但它可以工作。 @Vineela Thonupunuri您是否以正确的顺序尝试了代码?
这个解决方案对我来说非常有效
1 2 3 4 5 6 7 8 9 10
| var table = document.getElementById("myTable").rows;
var y;
for(i = 0; i < # of rows; i++)
{ for(j = 0; j < # of columns; j++)
{
y = table[i].cells;
//do something with cells in a row
y[j].innerHTML ="";
}
} |
-
就是JavaScript吗?因为您的for循环看起来有点像PHP。
-
当您知道要查找的内容时,许多语言都惊人地相似。 PHP会在每个变量前使用$,但这不是。 var也是JavaScript使用的关键字,不是PHP使用的关键字,尽管如果他们添加了它,我可能会错过它。 -edit-不能输入换行符...正如我所说:逻辑是通用的。知道如何将其转录为其他语言是一项非常有用的技能,这并不难学习-我们是具有出色的模式匹配能力的智者。确定每种语言之间的更改,或仅使用词法分析器语言定义...
使用单个for循环:
1 2 3 4 5
| var table = document.getElementById('tableID');
var count = table.rows.length;
for(var i=0; i<count; i++) {
console.log(table.rows[i]);
} |
您可以使用.querySelectorAll()选择所有td元素,然后使用.forEach()遍历这些元素。可以使用.innerHTML检索它们的值:
1 2 3 4
| const cells = document.querySelectorAll('td');
cells.forEach(function(cell) {
console.log(cell.innerHTML);
}) |
1 2 3 4 5 6 7 8 9 10
| <table name="mytab" id="mytab1">
<tr>
<td>col1 Val1</td>
<td>col2 Val2</td>
</tr>
<tr>
<td>col1 Val3</td>
<td>col2 Val4</td>
</tr>
</table> |
如果只想从特定行中选择列,则可以使用伪类:nth-child()选择特定的tr,还可以选择与子组合器(>)结合使用(在以下情况下很有用:您在表格中有一张表格):
1 2 3 4
| const cells = document.querySelectorAll('tr:nth-child(2) > td');
cells.forEach(function(cell) {
console.log(cell.innerHTML);
}) |
1 2 3 4 5 6 7 8 9 10
| <table name="mytab" id="mytab1">
<tr>
<td>col1 Val1</td>
<td>col2 Val2</td>
</tr>
<tr>
<td>col1 Val3</td>
<td>col2 Val4</td>
</tr>
</table> |
|