我到处寻找这个问题的解决方案,但没有任何效果。我已成功拉出第一列,但无法拉出第二列。以下代码成功拉取了整个第一列。
我将 .cells
更改为 [1]
并且它什么也没拉。我已经尝试过 :nth-child(1)
但这也不起作用。我觉得我错过了一些非常微不足道的东西。非常感谢任何帮助。
function F0416()
{
var tab = document.getElementById('partTable');
var l = tab.rows.length;
var s = '';
for ( var i = 0; i < l; i++ )
{
var tr = tab.rows[i];
var cll = tr.cells[0];
s += ' ' + cll.innerText;
}
document.write(s);
}
最佳答案
首先。永远不要使用l
(小写 el)作为变量。它与 1
非常相似(一)。还要注意大写“o”和大写“i”。小写的“o”通常也不受欢迎。
现在可能看起来不错,但当您在 6 个月或一年后回顾它时,可能就没那么好了。还要考虑其他人可能需要阅读和修改您的代码。
够了。
按原样,您的代码应该可以工作。如果您没有得到预期的结果,那么问题出在其他地方。
使其可重用
但是,为了简化代码并使其更易于重用,您可以为表格的 id 以及所需的列添加一个参数。生成的函数可能是这样的,有一些额外的检查:
function getColumn(table_id, col) {
var tab = document.getElementById(table_id);
var n = tab.rows.length;
var i, s = null, tr, td;
// First check that col is not less then 0
if (col < 0) {
return null;
}
for (i = 0; i < n; i++) {
tr = tab.rows[i];
if (tr.cells.length > col) { // Check that cell exists before you try
td = tr.cells[col]; // to access it.
s += ' ' + td.innerText;
} // Here you could say else { return null; } if you want it to fail
// when requested column is out of bounds. It depends.
}
return s;
}
var txt = getColumn('partTable', 2);
检查失败
通过使用 null
作为 s
的初始值, 我们可以将返回结果与 null
进行比较看看是否成功。
if (txt === null) {
// Report error, or at least not work on "txt".
}
简化
一旦你真正理解了它,如果你愿意,你可以把循环简化成这样:
for (i = 0; i < n; i++) {
if (tab.rows[i].cells.length > col) {
s += ' ' + tab.rows[i].cells[col].innerText;
}
}
使用数组:
如果您要一个一个地使用单元格,最好的方法是返回一个数组而不是一个字符串。然后你可以循环数组,或者如果你想要它作为一个字符串,只需将它与所需的分隔符连接起来。这很可能是最有用和可重用的功能。
// In function:
arr = [];
// In loop:
arr.push(tab.rows[i].cells[col].innerText);
var cells = getColumn("the_id", 2);
var text = cells.join(' ');
演示:
速度。
如果您的表格单元格不包含任何 <script>
或 <style>
,他们不应该,你也可以考虑使用 textContent
在 innerText
.特别是如果 table 很大。这是一个更快。这是 Kelly Norton 关于这个主题的一篇短文:
关于Javascript 获取整个第二列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22097155/