Javascript获得整个第二列

时间:2014-02-28 13:57:22

标签: javascript cells

我到处寻找解决这个问题的方法,但没有任何效果。我已成功拉出第一列,但我无法拉出第二列。以下代码成功提取整个第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);
}

3 个答案:

答案 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(' ');

演示:

Fiddle demo with array


速度。

如果您的表格单元格中不包含任何<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

Fiddle