`
hwpok
  • 浏览: 250482 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

JS 两个 Select 移动 项

阅读更多
<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->/*
*WRITE BY   :惠万鹏
*DATE       :2008-06-10
*VERSION    :1.0
*DESCRIPTION:
*/
var SelUtil = 
{
    
/**
    *对二维数组进行排序
    *arr      :将要排序的数组
    *dimIndex :按第几维排序,可选值0或1
    *ascOrDexc:按升序或降序,可先值为0或1
    *返回一个已经排好序的数组
    
*/
    __sortDyadicArray : 
function (arr, dimIndex, ascOrDesc)
    {
      
var tempArr = null;
      
/** 使用选择排序法排序*/
      
for(var m = 0; m < arr.length-1; m++)
      {
        
var index = m;
        
for(var n = m + 1; n < arr.length; n++){
          
/** 按第一维升序排序 */
          
if(dimIndex == 0 && ascOrDesc == 0 
            
&& arr[n][0] < arr[index][0])
          {
            
index = n;
          }
          
/** 按第一维降序排列 */
          
else if(dimIndex == 0 && ascOrDesc == 1 
            
&& arr[n][0] > arr[index][0])
          {
            
index = n;
          }
          
/** 按第二维升序排序 */
          
else if(dimIndex == 1 && ascOrDesc == 0 
            
&& arr[n][1] < arr[index][1])
          {
            
index = n;
          }
          
/** 按第二维降序排列 */
          
else if(dimIndex == 1 && ascOrDesc == 1 
            
&& arr[n][1] > arr[index][1])
          {
            
index = n;
          }
        }
        tempArr 
=    arr[m];
        arr
[m] =     arr[index];
        arr
[index] = tempArr;
      }
      
return arr;
    },
    
/**向Sel中加入一项
    *oListbox:列表对象
    *sName   :Listbox文本
    *sValue  :Listbox值
    
*/
    __
add : function (oListbox, sValue, sName, sInitValue)
    {
        
var oOption = document.createElement("option");
        oOption.appendChild(document.createTextNode(sName));
        
if (arguments.length == 4)
        {
            oOption.setAttribute("value",sValue);
            
if(sValue == sInitValue)
            {
                oOption.setAttribute("selected",true);
            }
            oListbox.appendChild(oOption);
        }
    },
    
/**
    *从二维数中加入多个option
    *oListbox   :列表对象
    *dyadicArray:二维数组
    
*/
    __addAll : 
function (oListbox, dyadicArray, sSelected)
    {
        
for(var i = 0; i < dyadicArray.length; i++)
        {
            this.__
add(oListbox, dyadicArray[i][0], dyadicArray[i][1], sSelected);
        }
    },
    
/*
    *从Sel中删除一项
    *oListbox:列表对象
    *iIndex  :项的索引号
    
*/
    __remove : 
function (oListbox, iIndex)
    {
        oListbox.remove(iIndex);
    },
    
/*
    *清空Sel的所有项
    *oListbox:列表对象
    
*/
    __clear : 
function (oListbox)
    {
        
for (var i = oListbox.options.length - 1; i >= 0; i--)
        {
            this.__remove(oListbox, i);
        }
    },
    
/**
    *两个Sel中相互移动
    *oListboxFrom:将要被移除的列表
    *oListboxTo  :将要被移到的列表
    *iIndex      :项的索引号
    
*/
    __move : 
function (oListboxFrom, oListboxTo, iIndex)
    {
        
var oOption = oListboxFrom.options(iIndex);
        
if(oOption !== null)
        {
            oListboxTo.appendChild(oOption);
        }
    },
    
/**
    *把所有选中的项移到另一个列表
    *oListboxFrom:将要被移到的列表
    *oListboxTo  :将要被移到的列表
    
*/
    __moveAll : 
function (oListboxFrom, oListboxTo,type)
    {
        
var indexes = this.__getIndexes(oListboxFrom,type);
        
for(var i = indexes.length - 1; i >= 0; i --)
        {
            this.__move(oListboxFrom, oListboxTo, indexes
[i]);
        }
    },
    
/**
    *把指定索引的项上移一个位置
    *oListbox:列表对象
    *iIndex  :索引号
    
*/
    __shiftUp : 
function (oListbox, iIndex)
    {
        
if(iIndex > 0)
        {
            
var oOption = oListbox.options[iIndex];
            
var oPrevOption = oListbox.options[iIndex - 1];
            oListbox.insertBefore(oOption, oPrevOption);
        }
    },
    
/**
    *把指定索引的项下移一个位置
    *oListbox:列表对象
    *iIndex  :索引号
    
*/
    __shiftDown : 
function (oListbox, iIndex)
    {
        
if (iIndex < oListbox.options.length - 1)
        {
            
var oOption = oListbox.options[iIndex];
            
var oNextOption = oListbox.options[iIndex + 1];
            oListbox.insertBefore(oNextOption, oOption);
        }
    },
    
/**
    *得到选中的索引
    *oListbox:列表对像
    *type    :可选值:1选中的index,0全部index,-1没选中的index
    
*/
    __getIndexes : 
function (oListbox, type)
    {
        
var arrIndexes = new Array;
        
for(var i = 0; i < oListbox.options.length; i++)
        {
            
if(type == 1)
            {
                
if (oListbox.options[i].selected)
                {
                    arrIndexes.push(i);
                }
            }
            
else if(type == 0)
            {
                arrIndexes.push(i);
            }
            
else if(type == -1)
            {
                
if (!oListbox.options[i].selected)
                {
                    arrIndexes.push(i);
                }
            }
        }
        
return arrIndexes;
    },
    
/**
    *把一个字符串转换成一个二维数组
    *str:带有分隔符的字符串
    
*/
    __strToDyadicArray : 
function (str)  
    {
        
var kvs = str.split('|');
        
var dyadicArray = new Array(kvs.length);
        
for(var i = 0; i < kvs.length; i++)
        {
            dyadicArray
[i] = new Array(2);
            dyadicArray
[i][0] = kvs[i].substring(0, kvs[i].indexOf(":"));
            dyadicArray
[i][1] = kvs[i].substring(kvs[i].indexOf(":") + 1, kvs[i].length);
        }
        
return dyadicArray;
    },
    
/**
    *初始化一个Sel
    *SelId   :Sel的id
    *str     :初始化字符串
    *sDefault:默认值
    
*/
    initSel : 
function(selId, str, sSelected)
    {
        
if(str.length > 0)
        {
            
var kvs = this.__strToDyadicArray(str);
            oSel 
= document.getElementById(selId);
            this.__addAll(oSel,kvs,sSelected);
        }
    },
    
/**
    *初始化两个Sel
    *selLeftId :左边Sel的id
    *selRightId:右边Sel的id
    *strLeft   :左边初始化字符串
    *strRight  :右边初始化字符串
    
*/
    initDouSel : 
function(selLeftId, selRightId, strLeft, strRight)
    {
        this.initSel(selLeftId, strLeft, 
'XXXX');
        this.initSel(selRightId, strRight, 
'XXXX');
    },
    
/**
    *左边全部移到右边
    *selLeftId :左边列表id
    *selRightId:右边列表id
    *bla       :button left all
    *blp       :button left part
    *bra       :button right all
    *brp       :button right part
    
*/
    leftSelToRightSelAll : 
function(selLeftId, selRightId, bla, blp, bra, brp)
    {
        
var oSelLeft = document.getElementById(selLeftId);
        
var oSelRight = document.getElementById(selRightId);
        this.__moveAll(oSelLeft,oSelRight,
0);
        document.getElementById(bla).disabled 
= true;
        document.getElementById(blp).disabled 
= true;
        document.getElementById(bra).disabled 
= false;
        document.getElementById(brp).disabled 
= false;
    },
    
/**
    *左边选中的项全部移到右边
    *selLeftId :左边列表id
    *selRightId:右边列表id
    *bla       :button left all
    *blp       :button left part
    *bra       :button right all
    *brp       :button right part
    
*/
    leftSelToRightSelPart : 
function(selLeftId, selRightId, bla, blp, bra, brp)
    {
        
var oSelLeft = document.getElementById(selLeftId);
        
var oSelRight = document.getElementById(selRightId);
        this.__moveAll(oSelLeft,oSelRight,
1);
        
if(this.__getIndexes(oSelLeft,0).length == 0)
        {
            document.getElementById(bla).disabled 
= true;
            document.getElementById(blp).disabled 
= true;
        }
        
else
        {
            document.getElementById(bla).disabled 
= false;
            document.getElementById(blp).disabled 
= false;
        }
        document.getElementById(bra).disabled 
= false;
        document.getElementById(brp).disabled 
= false;
    },
    
/**
    *右边全部移到左边
    *selLeftId :左边列表id
    *selRightId:右边列表id
    *bla       :button left all
    *blp       :button left part
    *bra       :button right all
    *brp       :button right part
    
*/
    rightSelToleftSelAll : 
function(selLeftId, selRightId, bla, blp, bra, brp)
    {
        
var oSelLeft = document.getElementById(selLeftId);
        
var oSelRight = document.getElementById(selRightId);
        this.__moveAll(oSelRight,oSelLeft,
0);
        document.getElementById(bra).disabled 
= true;
        document.getElementById(brp).disabled 
= true;
        document.getElementById(bla).disabled 
= false;
        document.getElementById(blp).disabled 
= false;
    },
    
/**
    *左边选中的项全部移到右边
    *selLeftId :左边列表id
    *selRightId:右边列表id
    *bla       :button left all
    *blp       :button left part
    *bra       :button right all
    *brp       :button right part
    
*/
    rightSelToLeftSelPart : 
function(selLeftId, selRightId, bla, blp, bra, brp)
    {
        
var oSelLeft = document.getElementById(selLeftId);
        
var oSelRight = document.getElementById(selRightId);
        this.__moveAll(oSelRight, oSelLeft, 
1);
        
if(this.__getIndexes(oSelRight,0).length == 0)
        {
            document.getElementById(bra).disabled 
= true;
            document.getElementById(brp).disabled 
= true;
        }
        
else
        {
            document.getElementById(bra).disabled 
= false;
            document.getElementById(brp).disabled 
= false;
        }
        document.getElementById(bla).disabled 
= false;
        document.getElementById(blp).disabled 
= false;
    }
}
使用方法:
<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --><html>
<head>
    
<title>Two-Select</title>
    
<script language="javascript" src="/SelUtil.js" charset="gb2312"></script>
</head>

<body>
    
<select id="s1" style="width:80;height:100;float:left" multiple></select>
    
<div style="width:50;height:100;margin:5px;float:left;text-align:center;">
        
<input type="button" id="b1" class="b1" value="&gt;&gt;" 
            onclick
="SelUtil.leftSelToRightSelAll('s1','s2','b1','b2','b3','b4')">
        
<input type="button" id="b2" class="b2" value="&gt;"
            onclick
="SelUtil.leftSelToRightSelPart('s1','s2','b1','b2','b3','b4')">
        
<input type="button" id="b3" class="b3" value="&lt;" 
            onclick
="SelUtil.rightSelToLeftSelPart('s1','s2','b1','b2','b3','b4')" > 
        
<input type="button" id="b4" class="b4" value="&lt;&lt;"
            onclick
="SelUtil.rightSelToleftSelAll('s1','s2','b1','b2','b3','b4')" >
    
</div>
    
<select id="s2" style="width:80;height:100" multiple></select>
    
<script language='javascript'>
         
var str1 = "1:赵云|2:张辽|3:典韦";
        
var str2 = "4:吕布|5:张飞|6:关羽";
        document.body.onload 
= function ()
        {
            SelUtil.initDouSel(
"s1","s2",str1,str2);
        }
    
</script>
</body>
</html>

分享到:
评论

相关推荐

    用js实现两个select下拉框之间的元素互相移动

    本文将深入探讨如何使用JavaScript实现两个Select下拉框之间的元素互相移动的功能。这一功能常见于需要动态调整选项归属的情景,例如在多选设置或数据分类中。 首先,我们需要创建两个Select元素,分别命名为`...

    两个select 框的数据移动

    要实现“两个select框的数据移动”,我们需要关注以下几个关键知识点: 1. **事件监听**:首先,我们需要在源`&lt;select&gt;`框上监听`change`事件。当用户做出选择时,这个事件会被触发。此外,如果支持多选,还需监听`...

    javascript 操作两个select,左右选择值。

    这就是一个简单的JavaScript实现,允许用户在两个Select下拉框之间移动选择的值。在实际项目中,可能还需要处理更多细节,如错误处理、验证、用户反馈等,但以上代码已经提供了一个基础框架。如果你在项目中使用了像...

    两个 select 下拉框中的数据相互移动

    总结起来,实现“两个select下拉框中的数据相互移动”涉及到HTML、CSS和JavaScript的基本知识,以及对用户交互的响应和处理。实际开发中还需要根据具体需求进行调整和优化,确保用户体验的流畅和功能的完善。

    实现两个select之间内容的互换实测通过

    总结一下,实现两个`&lt;select&gt;`下拉框内容互换的关键在于正确获取`&lt;select&gt;`元素,利用JavaScript或jQuery操作`&lt;option&gt;`元素,并绑定合适的事件触发互换。在VS2008环境下,可以方便地进行网页设计和开发,结合HTML、...

    双选框 两个<select>标签组成 高效代码清晰

    当用户选择一项并触发移动操作时,JavaScript会修改DOM(文档对象模型),将选中的项从一个`&lt;select&gt;`移到另一个。这里提到的“Map的遍历”可能指的是JavaScript中的Map数据结构,它被用来存储和管理数据键值对,...

    select2.mim.js and select2.min.css.zip

    这两个文件应当在HTML页面中正确引用,以便Select2库正常工作。 在实际应用中,我们通常会在文档头部引入`select2.min.css`,并在脚本部分引入`select2.min.js`,并确保在DOM加载完成后初始化Select2。例如: ```...

    JavaScript实现两个select下拉框选项左移右移

    根据提供的文件内容,我们可以提炼出以下关于JavaScript实现两个select下拉框选项左移右移的知识点: 1. 通过JavaScript实现两个下拉框间选项的转移是常见的前端技术应用场景。它允许用户通过简单的操作来移动元素...

    jquery+select选中左侧项目移动到右侧

    接下来,我们需要使用 jQuery 来处理按钮点击事件,实现在两个 select 之间移动选中项的功能。在 `&lt;script&gt;` 标签中添加以下 JavaScript 代码: ```javascript $(document).ready(function() { // 当点击“移至...

    基于纯js是实现的能够在上下两个列表框及数据项位置移动的程序代码

    本项目就是利用JavaScript实现的一个功能,允许用户在两个列表框之间以及列表内部移动数据项。以下是对这个程序代码的详细解析: 1. **列表框(List Box)**: 列表框是HTML中的一种常见元素,通常用`&lt;select&gt;`...

    利用js完成两个下拉列表中元素的移动

    利用js完成两个下拉列表中元素的移动,而且可以实现自身下拉列表元素的上下移动!

    两个select多选模式的选项相互移动(示例代码)

    在本文中,我们将深入探讨如何实现两个`select`元素之间的多选选项相互移动的功能,以及相关的JavaScript代码示例。在Web开发中,这样的功能常见于用户需要在多个选项中进行选择并分配的情况,例如角色分配或者分类...

    java Script ,jquery 写的 select 中的option 左右移动,上下移动

    对于左右移动,我们可以假设存在两个`&lt;select&gt;`元素,分别表示“左侧列表”和“右侧列表”。用户可以将“左侧列表”的选项移动到“右侧列表”,反之亦然。这涉及到从一个`&lt;select&gt;`中移除元素并将其添加到另一个`...

    JQuery实现select互换数据和上下移动

    本文将深入探讨如何使用jQuery实现一个类似Struts2中的`optiontransferselect`标签的功能,即在两个下拉框之间进行选项的互选和上下移动。 首先,我们需要了解`optiontransferselect`的基本概念。在Struts2框架中,...

    JS实现Select的option上下移动的方法

    这两个函数都接受两个参数:direct用于指示移动的方向,selectId是select元素的ID。 函数UpOrDown通过定义一个临时数组tempOptions来保存将要移动的option项。根据移动方向,它会调整tempOptions中的元素顺序,然后...

    select2.js

    minimumInputLength: 2, // 搜索至少输入两个字符 maximumSelectionLength: 3, // 最多选三个 }); ``` 4. **监听事件**:select2.js提供了丰富的事件接口,可以监听用户的选择行为,实现动态响应: ```...

    js从select1选择到select2 左边选择到右边(很好用)

    总结,这个功能通过JavaScript和HTML的`select`标签实现了在两个下拉列表之间动态移动选项的功能,方便用户在多个选项中进行选择。在实际应用中,可以根据需求进行调整和扩展,例如增加验证、批量操作等高级功能。...

    js select 实现左右传值

    Js实现两个Select标签中的选项之间的移动

    html最全的js javascript操作select 下拉框

    如果只提供了两个参数,选项的值将默认为其显示文本。 ```javascript function selectOptionAdd(oSelect, sName, sValue) { var oOption = document.createElement("option"); oOption.appendChild(document....

    JavaScript操作select&&table

    首先找到当前行的下一个兄弟节点,然后调用`swapNode`函数交换这两个节点的位置,从而实现行向下移动。 ##### 5. 将某一行向上移动 ```javascript function moveUp(_a) { var _row = _a.parentNode.parentNode; ...

Global site tag (gtag.js) - Google Analytics