我到处寻找解决这个问题的方法,但没有任何效果。我已成功拉出第一列,但我无法拉出第二列。以下代码成功提取整个第1列。
我将.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);
}
答案 0 :(得分:3)
首先。永远不要使用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
。特别是如果桌子很大。它要快得多。以下是Kelly Norton关于这个主题的简短文章:
答案 1 :(得分:1)
// This pulls all columns
function getAllCells(table) {
var result = [];
for(var i = 0, j = 0, l = table.rows.length, l2 = 0; i < l; i++) {
for(j = 0, l2 = table.rows[i].cells.length; j < l2; j++) {
result.push(table.rows[i].cells[j].innerText);
}
}
return result.join(',');
}
答案 2 :(得分:0)
你可以试试这个:
1)将现有代码添加到函数中,以便传入column参数。
2)tr.cells[0]
应使用传入的参数更改为tr.cells[col]
。
3)将innerText
更改为innerHTML
,因为innerText在某些浏览器上不起作用。
function getCol(col) {
var s = '';
for (var i = 0; i < l; i++) {
var tr = tab.rows[i];
var cll = tr.cells[col];
s += ' ' + cll.innerHTML;
}
return s;
}
console.log(getCol(1)) // 222 in my example