关于select上下移动实现的一些个人见解

       使用select框上下移动选项对数据进行排序是我们常用做法,但是一般网上所看到的都大同小异。基本上都是使用insertBefore来完成。但是经过本人测试,如果选项数超过10个,移动一个选项到顶部都需要差不多一秒的时间,如果同时移动多个选项,那速度就比较惊人了。所以,我认为这种方法不可取。

      

       本人采用的做法就是:

      第一步:获取所有选项对象

      第二步:对选项对象进行排序(在排序过程中,使用对象的克隆对象【很重要】)

      第三步:清空select里面的所有选项

      第四步:插入克隆的对象

 

实例如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>Select 排序,移动等</title>
</head>
<body >
<br/>
<table>
<tr >

    <td>
        <select id="ObjSelect" name=ObjSelect size=6 class="ecv_autoSizeDropDown" style="height:300px;width:100px" multiple  >
            <option value="11">test11</option>
            <option value="12">test12</option>
            <option value="13">test13</option>
            <option value="14">test14</option>
            <option value="15">test15</option>
            <option value="16">test16</option>
   <option value="11">test111</option>
            <option value="12">test122</option>
            <option value="13">test133</option>
            <option value="14">test144</option>
            <option value="15">test155</option>
            <option value="16">test166</option>
   <option value="11">test1111</option>
            <option value="12">test1222</option>
            <option value="13">test1333</option>
            <option value="14">test1444</option>
            <option value="15">test1555</option>
            <option value="16">test1666</option>
        </select>

    </td>
    <td width="30px">
        <input type=button value="top(使用insertBefore)" οnclick="moveToTop(document.getElementById('ObjSelect'))" > <br><br>
  <input type=button value="top(排序再生成)" οnclick="moveToTop1(document.getElementById('ObjSelect'))" > <br><br>

    </td>
</tr>
</table>


<script language=javascript>

function moveToTop(selectObj){

    var theObjOptions=selectObj.options;
    var oOption=null;
    for(var i=0;i<theObjOptions.length;i++) {
        if( theObjOptions[i].selected && oOption) {
           selectObj.insertBefore(theObjOptions[i],oOption);
        }
        else if(!oOption && !theObjOptions[i].selected) {
            oOption=theObjOptions[i];
        }
    }

}

function moveToTop1(selectObj){
 //在重新渲染前,对所有的排序,再重新生成可能速度更快
 var theObjOptions=selectObj.options;
 var newOptionsSelected   = [] ;
 var newOptionsUnSelected   = [] ;
    var oOption=null;
 //第一步,循环选中的
    for(var i=0;i<theObjOptions.length;i++) {
  var option = theObjOptions[i] ;
        if( option.selected ) {
   newOptionsSelected.push(option.cloneNode(true)) ;
        }else{
   newOptionsUnSelected.push(option.cloneNode(true));
  }
    }
 //数组合并
 var os = newOptionsSelected.concat(newOptionsUnSelected) ;
 //重新生成
 selectObj.options.length = 0;
 //alert(os.length) ;
 for(var i=0 ;i<os.length ;i++){
  //alert(os[i]);
  selectObj.appendChild(os[i]);
 }
}
</script>
</body>
</html>

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值