文字列のリストを含む数百行の長さのhtmlテーブルがあります。テーブルに新しい行を挿入する入力ボックスもあります。各行の 2 番目の td 要素は常に div 内の文字列であるため、テーブル内の行は次のようになります。
<tr>
<td><span class="ui-icon ui-icon-arrowthick-2-n-s"></span>
</td>
<td class="a_string" style="width:200px;">
<div style="word-wrap:break-word;">hello world</div>
</td>
...
</tr>
ユーザーからの文字列のリストに基づいて、このテーブルに新しい行を挿入したいのですが、文字列が既にテーブルにある場合、その文字列は無視され、挿入されません。ユーザーからの文字列のリストが非常に長く、テーブル内の行数が非常に長い場合に問題が発生します。重複をチェックするために急いで作成した方法は、このタスクには非効率的です。
function check_rows(item) { //called on each item in input list
var tf = false;
$('#mytable tbody').children().each(function (i) {
//loop through each tr
if ($('#mytable tbody').children().eq(i).children().eq(1).hasClass('a_string')) {
//if the row is a string to compare (second td element has the class 'a_string')
if (item == $('#mytable tbody').children().eq(i).children().eq(1).children().eq(0).html()) {
//find the string within the div within second td in row "i" (current indexed row)
//compare the strings and if it is found in the table break out of the loop
tf = true;
return false;
}
}
});
//if the item is not found in any of the rows false will be returned
return tf;
}
この関数は本来の機能 (重複する文字列のチェック) を実行しますが、遅すぎます。この関数なしでリストを挿入しようとしましたが、ほとんど瞬時だったので、問題はここにあります。
この機能を改善する方法についての提案は大歓迎です!