1

各 td に生成された html を含む巨大なテーブルがあります。生成された html は、最終的には class のコンテナー div 内の別のテーブルにすぎません.cellcontent。そのテーブルの最初のセルの内容を取得するための現在の jquery は遅すぎます。以下を書くためのより良い/より速い方法は何ですか?

var contents = $(cell).find('.cellContent>table>tbody>tr>td:first :first-child');

この jquery は、非常に大きなテーブルの各セルに対して頻繁に実行され、ページのパフォーマンスを大幅に低下させているようです。

セルは次のとおりです。

var mainTable = document.getElementById("gridID");
for (var colIndex = startIndex; colIndex <= mainTable.rows[0].cells.length; colIndex++) {
    for (var i = 1, row; row = mainTable.rows[i]; i++) {
        cell = row.cells[colIndex - 1];
    }
}

セルの内容の正確に生成された html は、次の行に沿ったものです。

<td class="staticCol prefItem">
    <div class="P_5_18_2013 cellContent">
        <table>
            <tbody>
                <tr>
                    <td>
                        <!--
                        ***HTML I want***
                        e.g., DIV or P or other markup
                        -->
                    </td>
                </tr>
            </tbody>
        </table>
    </div>
</td>
4

3 に答える 3

1

ほとんどのセレクターは必要ありません

$(cell).find('.cellContent').find('td:first :first-child');

それはスピードアップしますが、ボトルネックになる可能性は低いです。ネストされた for ループは、jquery セレクターよりもパフォーマンスの問題を引き起こす可能性が高くなります。

ループを次のように変更することもできます

$(".gridID>tr>td:nth-child(1n+" + startindex).find('.cellContent').find('td:first :first-child');

注:あなたは最後の列よりもさらに1つ反復している外側のループにいます。

于 2013-05-21T17:16:44.770 に答える