我有一个包含字符串列表的数百行长的 html 表。我还有一个输入框,可以在表格中插入新行。每行中的第二个 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;
}
该函数做了它应该做的事情(检查重复的字符串),它太慢了。我试图在没有此功能的情况下插入列表,它几乎是瞬时的,所以问题就在这里。
任何有关如何改进此功能的建议将不胜感激!