JavaScript获取完整的第二列
我到处寻找这个问题的解决方案,但都没有奏效。我已经成功地拉出了第一列,但我拉不到第二列。下面的代码成功地拉出了整个第一列。
我将.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
(1)非常相似。还要注意大写字母"o"和大写字母"i"。小写的"o"通常也不受欢迎。
说得够多了。
您的代码应该可以工作。如果您没有获得预期的结果,则问题出在其他地方。
使其可重复使用
但是,为了简化代码并使其更易于重用,您可以为表的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(' ');
演示:
Fiddle demo with array
速度。
如果您的表格单元格不包含任何<script>
或<style>
(它们不应该包含),您还可以考虑使用textContent
而不是innerText
。特别是如果桌子很大的话。它的速度要快得多。以下是凯利·诺顿关于这个主题的一篇短文:
- INNERTEXT VS. TEXTCONTENT
相关文章