为动态生成的表设置id有问题

时间:2014-11-04 18:24:21

标签: javascript

没关系。这是我的错。此代码工作正常。

我有一个应该创建和填充表的函数。我也尝试设置某些列的id元素,但是我的功能不起作用,我似乎无法找出原因。

这是我的代码:

HTML:

<div id="result_table">

            <table border="0" cellspacing="3" cellpadding="3" id="summaryTable" class="tablesorter table table-striped">
            <thead>
            <tr style="font-weight: bold; text-align: center;">
            <th>Well ID</th>
            <th>Dominant Gene</th>
            <th>%</th>
            <th>Secondary Gene</th>
            <th>%</th>
            <th>No. of Reads that Mapped</th>
            <th>No. of Mutations</th>
            <th>Mutation Information</th>
            <th>View</th>
            </tr>
            </thead>
        <tbody id="summaryBody">
        </tbody>
    </table>
</div>

使用Javascript:

function structureTable(test){
    if (kiloseqResult==null){
        throw "Error: no databse defined"
    };

    document.getElementById("summaryTable").style.visibility="visible";
    kiloseqDatabase = JSON.parse(kiloseqResult);

    var table = document.getElementById("summaryBody");

    for (i=0;i<kiloseqDatabase.length;i++){
        var row = table.insertRow(i);

        var kiloseqKeys = Object.keys(kiloseqDatabase[i])
        var keyLength = Object.keys(kiloseqDatabase[i]).length;

        // Painstakingly setting up the cells...

        var cell = row.insertCell(0);
        cell.innerHTML = kiloseqDatabase[i]['id']

        var cell = row.insertCell(1);
        cell.innerHTML = kiloseqDatabase[i]['gene1'].substr(5)

        var cell = row.insertCell(2);
        cell.innerHTML = parseFloat(kiloseqDatabase[i]['percent1']).toFixed(2)

        var cell = row.insertCell(3);
        if (kiloseqDatabase[i]['gene2']=="None"){
            cell.innerHTML = "None"
        } else {
            cell.innerHTML = kiloseqDatabase[i]['gene2'].substr(5)
        }

        var cell = row.insertCell(4);
        cell.innerHTML = parseFloat(kiloseqDatabase[i]['percent2']).toFixed(2)

        var cell = row.insertCell(5);
        cell.innerHTML = kiloseqDatabase[i]['count']

        var cell = row.insertCell(6);
        cell.innerHTML = ""

        var cell = row.insertCell(7);
        cell.innerHTML = ""

        var cell = row.insertCell(8);
        cell.innerHTML = ""

    };

    $(document).ready(function() 
        { 
            $("#summaryTable").tablesorter(
                {sortList: [[0,0], [1,0]]}
                ); 
        }
    );

    for (i=0;i<kiloseqDatabase.length;i++){
        document.getElementById("summaryBody").rows[i].cells[6].id = "test";
    };
};

kiloseqResult是一个变量,用于检查是否填充了kiloseqDatabase。 kiloseqDatabase包含应该填充表的信息。

奇怪的是,设置ID的for循环(是的,我确实尝试将其包含在第一个for循环中,但是当它运行时尝试将其分解)当我运行它时很好在我的Chrome控制台中。但它似乎并没有在这个功能中发挥作用。

非常感谢任何帮助。谢谢!

1 个答案:

答案 0 :(得分:1)

您是否尝试将ID分配逻辑放在document.ready范围内?您无法为元素分配ID,也不能在呈现之前从DOM中选择它:

$(document).ready(function() 
        { 
            $("#summaryTable").tablesorter(
                {sortList: [[0,0], [1,0]]}
                ); 
            for (i=0;i<kiloseqDatabase.length;i++){
                document.getElementById("summaryBody").rows[i].cells[6].id = "test";
            };
        }
    );