大数据量下的select框全选的效率问题

一个multiple的select框,   里面有7000个option,     我用下面的js(我看过一般都是这样写的)实现全选时需时60秒,   问有没有方式可以快速全选的??谢谢  
   
      function   checkall(form)  
  {  
          var   mlist   =   document.getElementById('com_selected');  
          for(var   i=0;i<mlist.options.length;i++)  
          {  
                  var   e=mlist.options[i];  
                  e.selected=form.selectall.checked;  
          }  
  } 

 

 

TRY:   
  
< div    id ="dv" > &nbsp; </ div >< p >    
  
< script    language ="javascript" >    
  
var   obj   =   new   Array();   
  
for(i=0;i<7000;i++){   
  obj[i]   
=   "<option   value=""+i+"">opt   "+i+"</option>";   
  }
   
  
var   selectstr   =   "<select   id="st"   size="20"   style="width:80%"   multiple>"+obj.join('')+"</select>"   
  dv.innerHTML   
=   selectstr;   
    
  
function   selectAllA(obj){   
  
var   n   =   obj.children.length;   
  
for(var   b=0;b<n;b++){   
  obj.children[b].selected   
=   true;   
  }
   
  }
   
    
  
function   selectAllB(obj){   
  
var   oldstr   =   obj.outerHTML;   
  
var   reg   =   /<option/ig;   
  
var   newstr   =   oldstr.replace(reg,"<option   selected");   
  dv.innerHTML   
=   newstr;   
  }
   
    
  
</ script >    
  
< p >    
  
< input    type ="button"    value ="Select   All   A"    onclick ="selectAllA(st);" >    
  
< input    type ="button"    value ="Select   All   B"    onclick ="selectAllB(st);" >

 

< html >    
    
  
< head >    
  
< meta    http-equiv ="Content-Type"    content ="text/html;   charset=gb2312" >    
  
</ head >    
    
  
< body >    
  
< form    name =formA >    
  
< input    name =selectall    type =checkbox    onclick ="document.getElementById('com_selected').style.visibility='hidden';setTimeout('checkall(document.formA);',10)"     >    
  
< select    name =com_selected    multiple   size =10    >    
  
< script >    
  
for(var   i=0;i<7000;i++)   
  document.write(
"<option   value=1>"+i+"</option>");   
  
</ script >    
  
</ select >    
  
</ form >    
  
</ body >    
    
  
</ html >    
    
  
< script >    
  
function   checkall(form)   
  
{   
          
var   mlist   =   document.getElementById('com_selected');   
          
var   mlistOptions=mlist.options;   
          
var   trueOrFalse=form.selectall.checked;   
          
for(var   i=mlistOptions.length-1;i>-1;i--)   
          
{   
                  mlistOptions[i].selected
=trueOrFalse;   
          }
   
          mlist.style.visibility
="";   
  }
   
  
</ script >
Top

  
    
  1。尽量减少for循环里对象的调用层次   
          var   e=mlist.options[i];   
          e.selected=form.selectall.checked;   
          //mlist.options可以拿到循环外取   
          //form.selectall.checked也可以拿到循环外取   
    
    
  2。select是个怪胎,可以先把它隐藏再改option的选中状态,改完后再显示select,以减少显示时间

 

你可能感兴趣的:(JavaScript,html,function,input,div,button)