table有几百行。每行都有一个车牌列。现在有若干车牌,怎么才能找到相对应的行,我以前是这样处理的。var  veh =["车牌1","车牌2"];for(var i =0; i<veh.length;i++)
for(var j = 0; j<tb.rows.length;j++)
{
    if(veh[i] ==tb.rows[j].cell[0].innerHTML)
    {
        //更新这一行的数据。
    }
}注意这里的table有添加,修改,删除行的操作。
如果有五百台车,每次veh 的length > 50,客户端就处理不过来(也就是循环了<=500*50次)。而现在是每三秒执行一次。(反正就是这样处理效率很低)
现在想问的是得到‘车牌1’能不能迅速的得到它在table中的行的index而不是通过for循环去一个个比较。
--------------------------------------帅签分割线-------------------------------------------------

解决方案 »

  1.   

    先说一个简单的易实现的方法车牌号一般来说可以是唯一键。
    所以,你可以在输出的html的tr中加上车牌号的id<tr id='浙X010101'></tr>
    这个时候就可以直接循环行,还不需要再循环列。找到tr时,就返回这个tr对象的rowIndex,就是所在行的索引了。
      

  2.   

    你的veh 里面的车牌号顺序是固定的吗?如果是固定的好办
      

  3.   

    其实没那么多次循环的。
    你可以    if(veh[i] ==tb.rows[j].cell[0].innerHTML)
        {
            //更新这一行的数据。
        break; //退出这次的循环
        }
      

  4.   


    在拿到innerHTML的时候 在 trim 一下 出错率会更小一些 .. 
      

  5.   

    里面没有空格 你还trim啥啊
      

  6.   

    他是在table 中td 中的 值 ie 拿可能没有空格 但是在ff 里面拿值的时候 可能 就会出现 空格..  晚辈在一次测试除过这样的问题  
      

  7.   


    break;是必须的。所以我说了<=500*50
    --------------------------------------帅签分割线-------------------------------------------------
      

  8.   

    用JQuery吧,速度很快的。看下面的代码:前面的代码是在生成一个table, 关键在最后那个query那个方法上。
    <html>
    <head>
    <script src="jquery-dev.js" type="text/javascript"></script>
    </head>
    <body>
    <table>

    </table>
    <input type="button" value="Query" onclick="query()" />
    <script type="text/javascript">
    var ids = [];

    $(function(){
    var rowCount = 100;
    for(var i=0; i<rowCount; i++){
    var number = parseInt(Math.random() * 10000);
    var row = $('<tr><td>' + number + '</td></tr>');
    $('table').append(row);

    if(i%5===0) ids.push(number);
    }
    });

    var query = function(){
    for(var i=0; i<ids.length; i++){
    $('td:contains("' + ids[i] + '")').css('color', 'red');
    }
    };
    </script>
    </body>
    </html>
      

  9.   

    如果实在想一次query可以用这个:
    var query = function(){
    var conditions = [];
    for(var i=0; i<ids.length; i++){
    conditions.push('td:contains("' + ids[i] + '")');
    }

    $(conditions.join(',')).css('color', 'red');
    };
      

  10.   


     jquery就可以。很方便。 欢迎光临我的博客
      

  11.   

    一点想法(缓存和截字符比较后获取排序),主要是觉得这个方法比较通用一些,而且效率也不差。 function searchIndex(id, str, sIndex) {//tableID, 要比较的字符, table中要比较字段所在的列
    if(!window.tableSort) {
    window.tableSort = {};
    }
    if(!window.tableSort[sIndex]) {
    var list = document.getElementById(id).getElementsByTagName('tr');
    var len = list.length;
    var temp = [];
    for(var i = 0; i < len; i++) {
    temp.push(list[i].getElementsByTagName('td')[sIndex - 1].innerHTML.replace('/(^\s*)|(\s*$)/g', ''));
    }
    window.tableSort[sIndex] = temp.join(',');
    }
    var sTemp = window.tableSort[sIndex];
    var sTemp2 = sTemp.substr(0, sTemp.indexOf(str) - 1);
    return sTemp2 == sTemp? -1 : sTemp2.length == 0? 0 : sTemp2.split(',').length;
    } var veh = ['车牌1', '车牌2'];
    for(each in veh) {
    alert(searchIndex('table', veh[each], 1));
    }
      

  12.   

    输出页面的时候,除了TABLE,还可以输出一个对应表格内每行车牌索引的JSON变量:var theforever_csdn ={"车牌1":车牌1所在行,"车牌2":车牌2所在行,"车牌3":车牌3所在行……};
    var veh = ['车牌1', '车牌2'];
    for(each in veh) {
          alert(veh[each]+'所在的行是'+theforever_csdn[veh[each]]);
    }
      

  13.   

    CUD(建改删)时相应地去更新一下这个JSON
      

  14.   


    var tempStr = tb.innerHTML;
    var rowIndex =  tempStr.split("车牌1")[0].split(/<TR>/g).length -2;
    alert(rowIndex);
    <table id="tb">
    <tr><td>车牌2</td><td></td><td></td></tr>
    <tr><td>车牌3</td><td></td><td></td></tr>
    <tr><td>车牌4</td><td></td><td></td></tr>
    <tr><td>车牌5</td><td></td><td></td></tr>
    <tr><td>车牌1</td><td></td><td></td></tr>
    <tr><td>车牌6</td><td></td><td></td></tr>
    <tr><td>车牌7</td><td></td><td></td></tr>
    <tr><td>车牌8</td><td></td><td></td></tr>
    </table>这可以避免循环
      

  15.   

    但是过多的ID也不好  几百行就得几百个ID