javascript有助于将元素从一个列表移动到另一个列表

时间:2014-11-12 18:05:13

标签: javascript

我有三个列表(存储桶)如下:

  1. '团队列表' (teamA,teamB,teamC)
  2. '会员名单' (member1,member2 ......等)
  3. '选定会员'即一个空列表,将由上述两个列表中的项目填充
  4. 以下两个按钮:

    1. '直接选择会员' - >该按钮将一个/多个被选中的成员从成员列表移动到R.H.S上的空桶。我实现了这个,这是有效的。

    2. '按团队选择会员' - >如果在团队的桶中选择了一个/多个团队,则此按钮将关联的团队成员从成员的桶中移动到空桶。我已经实现了一半而且卡住了。所以需要帮助来完成这个。

    3. 规则: 每个团队都有一些与之相关的成员。一个团队的成员可能是另一个团队的成员。

      1. 一旦会员从会员的桶中移动到空桶(通过'直接选择会员'或按'按团队选择会员'),该成员将从成员存储桶中删除。

      2. 如果选择了一个/多个团队,并按照团队选择成员'如果被按下,团队将留在团队的桶中,只有关联的成员才会从会员的桶中删除。

      3. 由于两个或多个团队可能会有重叠成员,因此如果某个成员已经从会员的桶中移动到RHS上的空桶,那么选择一个团队只会移动该成员留在会员的桶里。

      4. 不会从团队的队列中删除团队,只会删除相关成员。

      5. 我正在提供我到目前为止所写的代码,请帮助我按照团队选择成员'按照我上面的解释按钮功能。我使用JSON对象来定义团队和成员关系,它总是这样。请帮助。感谢。

        
        
        function appendapp(to, from) {
          var select1 = document.getElementById(to);
          var select2 = document.getElementById(from);
          var selectedArray = new Array();
          var i;
          var count = 0;
          if (select1.options.selectedIndex < 0)
            return false;
          for (i = 0; i < select1.options.length; i++) {
            if (select1.options[i].selected) {
              var val_select1 = select1.options[i].value;
              var text_select1 = select1.options[i].text;
              //alert('1st forloop text '+text_select1 + 'index '+i)
              select2.options[select2.options.length] = new Option(text_select1, val_select1, false, false);
              selectedArray[count] = i - count;
              count++;
            }
          }
          for (i = 0; i < selectedArray.length; i++) {
            //alert('2nd forloop selectedArray '+selectedArray[i])
            select1.options[selectedArray[i]] = null;
          }
          var tmpAry = new Array();
          for (i = 0; i < select2.options.length; i++) {
            tmpAry[i] = new Array();
            tmpAry[i][0] = select2.options[i].text;
            tmpAry[i][1] = select2.options[i].value;
            //alert('3rd forloop tmpAry-i-0 text '+tmpAry[i][0])
          }
          tmpAry.sort();
          //alert("before while select2optionslength ="+select2.options.length)
          while (select2.options.length > 0) {
            //alert('while loop')
            select2.options[0] = null;
          }
          for (var i = 0; i < tmpAry.length; i++) {
            var op = new Option(tmpAry[i][0], tmpAry[i][1]);
            //alert('last forloop '+op)
            select2.options[i] = op;
          }
          return;
        }
        
        function team2mem(sel, to, from) {
        
          var select1 = document.getElementById(sel);
          var select2 = document.getElementById(to);
          var select3 = document.getElementById(from);
        
          var selectedArray = new Array();
          var i;
          var count = 0;
        
          var maphash = {
            "teamA": ["member1", "member2", "member3"],
            "teamB": ["member4", "member5", "member6"],
            "teamC": ["member1", "member7", "member8"]
          };
        
          if (select1.options.selectedIndex < 0)
            return false;
        
          for (i = 0; i < select1.options.length; i++) {
            if (select1.options[i].selected) {
              var val_select1 = select1.options[i].value;
              var text_select1 = select1.options[i].text;
              //alert('1st forloop text '+text_select1 + ' index '+i);
              var apparr = maphash[text_select1];
              var apparrlen = apparr.length;
              //alert("apparray length = "+apparrlen);
              for (j = 0; j < apparrlen; j++) {
                var text_elem = maphash[text_select1][j];
                var var_elem = maphash[var_select1][j].value;
                //alert("new text ="+text_elem + " newvar ="+text_elem);
                select2.options[select2.options.length] = new Option(text_elem, val_elem, false, false);
                //selectedArray[count] = i-count;    
                count++;
              }
        
            }
          }
          return;
        }
        &#13;
        <div align="center"><font color="red"><b><span id="Error_App"></span></b></font>
        </div>
        <br>
        <font size=3><b>List Of Teams</b></font>
        <table border=0 width=100%>
          <tr>
            <td width=35%>
              <select multiple="multiple" id="teams" style="width:100%;" size="10">
                <option value=AA>teamA</option>
                <option value=BB>teamB</option>
                <option value=CC>teamC</option>
              </select>
            </td>
            <td width=30% align="left">
              <input title='SelectTeamMem.' type="button" id="add" value="Select members by team ->" onclick="team2mem('teams', 'mems', 'bin')"></input>
            </td>
          </tr>
          <tr>
            <td width=10%></td>
            <td width=20% align="right">
              <td width=60% valign="bottom">
                <font size=2>Selected Members</font>
                <br>
                <select multiple="multiple" id="bin" style="width:100%;" size="10">
                </select>
              </td>
              <td width=10%></td>
          </tr>
        </table>
        <div align="center"><font color="red"><b><span id="Error_App"></span></b></font>
        </div>
        <br>
        <font size=3><b>List of Members</b></font>
        <table>
          <tr>
            <td width=35% valign="bottom">
              <select multiple="multiple" id="mems" style="width:100%;" size="10">
                <option value=16313>member1</option>
                <option value=16250>member2</option>
                <option value=15041>member3</option>
                <option value=15041>member4</option>
                <option value=15041>member5</option>
                <option value=15041>member6</option>
                <option value=15041>member7</option>
                <option value=15041>member8</option>
            </td>
            <td width=30% valign="top">
              <br>
              <br>
              <input title='SelectMembers' type="button" id="add" value="Select Members directly ->" onclick="appendapp('mems','bin')"></input>
            </td>
          </tr>
        </table>
        &#13;
        &#13;
        &#13;

2 个答案:

答案 0 :(得分:0)

尝试Backbone.js,它是一个轻量级的框架,用于与#34;模型&#34;和&#34;收藏&#34;。 对于e.x.在你的情况下,你可以拥有&#34;会员&#34;作为具有团队名称作为属性的模型。 在视图中,您可以轻松处理点击事件并进行管理。

您可以在此处找到一些教程:http://backbonetutorials.com/

答案 1 :(得分:0)

我建议在MDN上阅读有关Javascript数组方法的内容:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array

专门查看地图,缩小和过滤。

另请考虑使用Underscore.js作为帮助程序库