<%
 For i = 1 To 3000
 %>
<tr bgColor="#FFFFFF" ID="GridRow<% = i %>">
<td><input type="text" style="width:100%" name="GridNo<% = i %>" id="Text41"  readonly value="&nbsp;<% = i %>" disabled></td>
<td><input type="text" style="width:100%" name="mc<% = i %>" id="Text42" ></td>
</tr>
<%
Next
%>
问题是如何快速查找MC文本框是否有重复,并提示重复的行数

解决方案 »

  1.   

    var a = "bb";
    var b = "saaaaaaaaaabbskadakbb";
    var c = b.spit("bb");
    var length = c;
    alert("c");//每行有多少个
      

  2.   

    因为真写了3000个“mc”,所以写了6000行,真正检测耗时(本地)IE在100毫秒、FF在30毫秒左右,应该说检测效率是理想的。<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
    <input type="button" value="检查重复" onclick="Test()">
    <div id="show"></div><script type=text/javascript>
    (function(){
     var i = 0, str = '<table width=300px>';
     while (++i < 3001)
     str += '<tr bgColor="#FFFFFF">\
             <td><input type="text" style="width:100%" id="Text41" readonly ></td>\
             <td><input type="text" style="width:100%" name="mc" id="Text42"></td></tr>';
             str += '</table>';
     document.getElementById("show").innerHTML = str;
    })();function Test(){
             var hash = {}, t = new Date;
             var obj = document.getElementsByName("mc");
             for(var i = 0; !!obj[i]; i ++) hash[obj[i].value] = "";
             for(var j in hash) i --;
             alert("实际检测耗时" + [new Date - t] + "毫秒");
             i == 0 && alert("这3000行MC文本框没有重复") || alert("这3000行MC文本框中有"+i+"行重复");
    }
    </script>
      

  3.   

    LZ意思是name以mc开头的文本框吧; //mc文本框的数目
     var mcNum = 0;
     for(var i = 1; i <= 3000;i++ ){    var objMC = document.getElementByNames('mc' + i);
        //如果有mc开头的文本框,加上其数目
        mcNum += objMc.length > 0 ? objMc.length : 0;
    }
    alert('重复的MC文本框有' + mcNum + '个');
      

  4.   

    写了个简单测试,ie大概8ms,火狐大概4ms<script>
    //检查重复行,并返回重复行号列表
    function check(list){
        var tmp={},rows=[];
        for(var i=0;i<list.length;i++){
            if(tmp[list[i]]) rows.push(i);
            else tmp[list[i]]=1;
        }
        return rows;
    }//测试
    var list=[];
    for(var i=0;i<3000;i++) list.push("字符串_"+Math.round(3000*Math.random()));var d1=new Date;
    var rows=check(list); //获取所有重复行号
    var d2=new Date;for(var i=0;i<rows.length;i++){
        document.write(rows[i]+"<br>"); //打印出重复行号
    }
    alert("重复行数:"+rows.length+"\n耗时:"+(d2-d1)+"毫秒!");
    </script>
      

  5.   

    哟,就是这意思,干脆给LZ个现成的算鸟。<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
    <input type="button" value="检查重复的行及索引号" onclick="Test()">
    <div style="width:500px">
    <div id="show" style="float:left"></div>
    <div id="prin"></div>
    </div>
    <script type=text/javascript>
    (function(){
         var i = 0, str = '<table id="tab" width=300px>';
         while (++i < 3001)
         str += '<tr bgColor="#FFFFFF">\
             <td><input type="text" style="width:100%" id="Text41" readonly ></td>\
             <td><input type="text" style="width:100%" value='+ Math.round(30000*Math.random()) +' name="mc'+i+'" id="Text42"></td></tr>';
             str += '</table>';
          document.getElementById("show").innerHTML = str;
    })();function Test(){
             var str = "重复的行索引号<br>", hash = {}, arr = [], t = new Date;
             var obj = document.getElementById("tab").getElementsByTagName("input");
             for(var i = 0; !!obj[i]; i ++) i % 2 != 0 && (!!hash[obj[i].value] ? arr.push(i) : (hash[obj[i].value] = "@"));
             alert("这6000行中3000个MC文本框有"+arr.length+"行重复,检测耗时" + [new Date - t] + "毫秒");
             for(var j = 0; !!arr[j]; j ++)
             str += [(arr[j] - 1) >>> 1] + "<br>";
             document.getElementById("prin").innerHTML = str;
    }
    </script>
      

  6.   

    <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
    <input type="button" value="检查重复的行及索引号" onclick="Test()">
    <div style="width:500px">
    <div id="show" style="float:left"></div>
    <div id="prin"></div>
    </div>
    <script type=text/javascript>
    (function(){
         var i = 0, str = '<table id="tab" width=300px>';
         while (++i < 3001)
         str += '<tr bgColor="#FFFFFF">\
             <td><input type="text" style="width:100%" id="Text41" readonly ></td><td><input type="text" style="width:100%" id="Text41"   name="test"></td>\
             <td><input type="text" style="width:100%" value='+ Math.round(30000*Math.random()) +' name="mc'+i+'" id="Text42"></td></tr>';
             str += '</table>';
          document.getElementById("show").innerHTML = str;
    })();function Test(){
             var str = "重复的行索引号<br>", hash = {}, arr = [], t = new Date;
             var obj = document.getElementById("tab").getElementsByTagName("input");
             for(var i = 0; !!obj[i]; i ++) i % 2 != 0 && (!!hash[obj[i].value] ? arr.push(i) : (hash[obj[i].value] = "@"));
             alert("这6000行中3000个MC文本框有"+arr.length+"行重复,检测耗时" + [new Date - t] + "毫秒");
             for(var j = 0; !!arr[j]; j ++)
             str += [(arr[j] - 1) >>> 1] + "<br>";
             document.getElementById("prin").innerHTML = str;
    }
    </script>
    问题是只检查MC文本框,不检查test文本框怎么处理,谢谢