如何从javascript填充表中提取数据?

时间:2010-07-13 18:09:50

标签: c# .net asp.net javascript jquery

我正在尝试从填充的javascript表中提取数据。如何从javascript行中提取值?我正在使用

            for (var i = 0; i < rowCount; i++) { 
            var row = table.rows[i]; 
            //This is where I am having trouble 
               var chkboxIndicator = row.cells[0].childNodes[1]; 
               alert(chkboxIndicator);
            //
            if (chkboxIndicator == indicator && Checkbox.checked == false) { 
                table.deleteRow(i); 
                rowCount--; 
                i--; 
            } 
        } 

其中包含“未定义”的警告消息。我也尝试了.value和.text,没有进展。如何从childNodes获取文本?

5 个答案:

答案 0 :(得分:0)

您确定chkboxIndicator不是null吗?

如果它为null,它将作为未定义警告。

尝试

for (var i = 0; i < rowCount; i++) 
{ 
    var row = table.rows[i]; 
    // Add null check for row
    if (row != null)
    {
        //This is where I am having trouble 

        // Add null check for cell
        if (row.cells[0] != null)
        {
            var chkboxIndicator = row.cells[0].childNodes[1];

            // Added null check for chkboxIndicator
            if (chkboxIndicator != null)
            {
                alert(chkboxIndicator);


                if (chkboxIndicator == indicator && Checkbox.checked == false) 
                { 
                    table.deleteRow(i); 
                    rowCount--; 
                    i--; 
                }
            }
            else
            {
                alert('chkboxIndicator is NULL');
            }       
        }
    }
}

答案 1 :(得分:0)

取决于你的DOM实际上是什么样的。

我怀疑你的问题是childNodes [1]可能是一个文本节点。

您可能希望在单元格上使用选择器,例如:

$(row.cells[0]).find("input[type='checkbox']");

答案 2 :(得分:0)

既然您声称使用的是jQuery,为什么不使用它来获取复选框并简化您的生活?

$("#mytableid tr").each(function() {
    // find the checkbox (assuming you have only one; if not, use :eq(n))
    var $checkbox = $("input:checkbox", this);
    // if it's checked, delete this row
    if ($checkbox.is(":checked"))
        $(this).remove();
});

有更疯狂的方法,但我认为这个例子是说明性的。 :)

答案 3 :(得分:0)

如果您希望它也快,请使用jOrder(http://github.com/danstocker/jorder)。

使用您的数据创建一个jOrder表。确保在其中使用true或false值“检查”字段,并在该列和ID上添加索引:

var table = jOrder(data)
    .index('id', ['ID'])
    .index('checked', ['checked'], { grouped: true });

然后,您可以使用table.where([{ 'checked': true }])作为来源删除未选中的行来重建网格。

但首先,使用jOrder表中的数据填充网格。使用table.flat()获取平面表。 构建网格时,将记录ID绑定到复选框,例如按$('#elem').data()。选中(取消)复选框后,更新表中的“已检查”值:

var before = table.where([{ 'ID': 5 }])[0];
var after = table.where([{ 'ID': 5 }])[0];
after.checked = true;
table.update(before, after);

请注意,您不应对“(un)check all”事件中的每个项目执行此操作。在这种情况下,只需简单地传递table.flat()或在其返回的缓冲区中设置“已检查”值,然后发出table.reindex()和然后调用table.where(...)

答案 4 :(得分:0)

我缺少的代码块如下

var row = table.rows.item(i).cells;
var cellLength = row.length;
var cellVal = row.item(5).innerHTML;

感谢您带领我朝着正确的方向前进