【JavaScript】列表(Select)选项(Option)的移动(上下左右)

简介:

对《【JavaScript】列表元素上下左右移动:Select和Option的应用》中的方法进行了优化。

1.使用appendChild()方法优化左右移动函数moveRight()

2.使用insertBefore()方法优化上下移动函数moveUp()

3.修改同时选中多项上下移动不正常的Bug

功能如下:

支持一次选中多项在左右列表中来回移动

 

 
 OPTION value=1>Java                 JavaScript                 C++                 HTML                   
                 CSS                 .Net                 

 

 

 

代码如下:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
 
<HEAD>
  
<TITLE> New Document </TITLE>
  
<META NAME="Author" CONTENT="majianan">
<SCRIPT language=javascript>
    
var currentSel = null ;
    
function
 setButton(obj){        
        
if(obj.length==0return
;
        currentSel 
=
 obj;
        
if(obj.id=="leftSel"
){
            document.getElementById(
"btnLeft").disabled = true
;
            document.getElementById(
"btnRight").disabled = false
;                
            reSelect(document.getElementById(
"rightSel"
));            
        }
else
{
            document.getElementById(
"btnLeft").disabled = false
;
            document.getElementById(
"btnRight").disabled = true
;               
            reSelect(document.getElementById(
"leftSel"
));                
        }       
    }

      
function
 move(){
          
if(arguments.length==1
){
              moveUp(arguments[
0
]);
          }
else if(arguments.length==2
){
              moveRight(arguments[
0],arguments[1
]);
          }
      }

      
function
 moveUp(direction){
          
if(currentSel == nullreturn
;
          
if(direction){//up

            if (currentSel.selectedIndex > 0 ) {  
                
for(var i=0;i<currentSel.length;i++
){
                    
if
(currentSel[i].selected){
                        
var oOption =
 currentSel.options[i];
                        
var oPrevOption = currentSel.options[i---1
];
                        currentSel.insertBefore(oOption, oPrevOption);
                    }
                }                
            } 
          }
else{//down

            for(var i=currentSel.length-1;i>=0;i-- ){
                
if
(currentSel[i].selected){
                    
if(i==currentSel.length-1return
;
                    
var oOption =
 currentSel.options[i];
                    
var oNextOption = currentSel.options[i+1
];
                    currentSel.insertBefore(oNextOption, oOption);                        
                }
            }
          }
      }

    
function
 moveRight(src,des){
        
if(src.selectedIndex==-1
){
            alert(
"Please select first!"
);
            
return
;
        }
        
for(var i=0;i<src.length;i++
){
            
if
(src[i].selected){
                des.appendChild(src.options[i
--
]);
            }
        }
        setButton(des);
    }
    
    
function
 reSelect(obj){
        
for(var i=0; i<obj.length; i++
){
            
if(obj[i].selected) obj[i].selected = false
;
        }
    }
    
</SCRIPT>


 
</HEAD>

 
<BODY>
  
<form id="form1">
      
<table width="40%" align="center">
          
<tr>
              
<td>
                  
<input type="button" value=" Up " id="btnUp" onClick="move(true);" style="width:65"/>
                
<br />
                
<input type="button" value=" Down " id="btnDowm" onClick="move(false);" style="width:65" />                 
              
</td>

              
<td>
                  
<select multiple id="leftSel" onclick="setButton(this)" ondblclick="document.getElementById('btnRight').click()" style="height:200px;width:100px;">

                    
<option value="1">Java</option>
                    
<option value="2">JavaScript</option>
                    
<option value="3">C++</option>
                    
<option value="4">HTML</option>
                
</select>
            
</td>
            
<td>
                
<input type="button" value=" >> " id="btnRight" onClick="move(document.getElementById('leftSel'),document.getElementById('rightSel'));" style="width:65" />
                
<br />
                
<input type="button" value=" << " id="btnLeft" onClick="move(document.getElementById('rightSel'),document.getElementById('leftSel'));" style="width:65" />
                
</td>
                
<td>
                    
<select multiple id="rightSel" onclick="setButton(this)"  ondblclick="document.getElementById('btnLeft').click()" style="height:200px;width:100px;" >
 
                    
<option value="5">CSS</option>
                    
<option value="6">.Net</option>
                    
</select>
                
</td>
            
</tr>
        
</table>
    
</form>
 
</BODY>
</HTML>

本文转自BlogJavaOo缘来是你oO的博客,原文链接:【JavaScript】列表(Select)选项(Option)的移动(上下左右),如需转载请自行联系原博主。


相关文章
|
7月前
|
前端开发 JavaScript
js + ajax实现商品列表页到详情页的跳转
js + ajax实现商品列表页到详情页的跳转
|
Web App开发 安全 前端开发
30dwr - engine.js 功能(选项说明)
30dwr - engine.js 功能(选项说明)
62 0
|
2月前
|
JavaScript
js学习--商品列表商品详情
js学习--商品列表商品详情
31 2
|
3月前
|
JavaScript 前端开发 索引
JavaScript HTML DOM 节点列表
JavaScript HTML DOM 节点列表
24 5
用html+javascript打造公文一键排版系统14:为半角和全角字符相互转换功能增加英文字母、阿拉伯数字、标点符号、空格选项
用html+javascript打造公文一键排版系统14:为半角和全角字符相互转换功能增加英文字母、阿拉伯数字、标点符号、空格选项
|
6月前
|
JavaScript 索引
Vue.js的`v-for`用于基于数组或对象渲染列表,如遍历数组生成`&lt;li&gt;`元素
【6月更文挑战第25天】Vue.js的`v-for`用于基于数组或对象渲染列表,如遍历数组生成`&lt;li&gt;`元素。基本语法是`v-for=&quot;(item, index) in items&quot;`,支持遍历对象的键值对。注意与`v-if`同用时应使用`&lt;template&gt;`,组件上使用`v-for`需设`key`属性以优化性能。
83 2
|
6月前
|
JavaScript 前端开发
JS实现select框实现模糊搜索
JS实现select框实现模糊搜索
|
6月前
|
JavaScript 前端开发 索引
探讨JavaScript中获取<select>元素选中情况的技术
探讨JavaScript中获取<select>元素选中情况的技术
226 0
|
7月前
|
JavaScript 前端开发
【专栏】`Function.prototype.apply` 在JavaScript中用于动态设定函数上下文(`this`)和参数列表
【4月更文挑战第29天】`Function.prototype.apply` 在JavaScript中用于动态设定函数上下文(`this`)和参数列表。它接受两个参数:上下文对象和参数数组。理解`apply`有助于深入JS运行机制。文章分三部分探讨其原理:基本概念和用法、工作原理详解、实际应用与注意事项。在应用中要注意性能、参数类型和兼容性问题。`apply`可用于动态改变上下文、传递参数数组,甚至模拟其他语言的调用方式。通过深入理解`apply`,能提升代码质量和效率。
45 3