js

读取并修改元素的内容

假设两个select元素,分别保存备选地区列表和选中地区列表
实现两选择框之间选项的交换:
包括:当个选中项左右移动
多个选中项左右移动
全左移和全右移
要求:两个select中的地区都要按照名称首字母排序

<select id="unsel" size="8" multiple>
        <option>Argentina</option>
        <option>Brazil</option>
        <option>Canada</option>
        <option>Chile</option>
        <option>China</option>
        <option>Cuba</option>
        <option>Denmark</option>
        <option>Egypt</option>
        <option>France</option>
        <option>Greece</option>
        <option>Spain</option>
</select>
    <div>
        <button onclick='move(this)'>&gt;&gt;</button>
        <button onclick='move(this)'>&gt;</button>
        <button onclick='move(this)'>&lt;</button>
        <button onclick='move(this)'>&lt;&lt;</button>
    </div>
<select id="sel" size="8" multiple>
</select>

1)将unsel元素中的所有国家名称填充到unselCts中

unsel的内容去掉开头和结尾的空字符,再掐头去尾,按?切割

unselCts=
  unsel.innerHTML
       .replace(/^\s+|\s+$/g,"")
       .slice(8,-9)
       .split(/<\/option>\s*<option>/);

2)判断btn的内容

是>>,就将unselCts拼接到selCts结尾,再保存回selCts中

function move(btn){
  switch(btn.innerHTML){
    case "&gt;&gt;":
      selCts=selCts.concat(unselCts);
      unselCts=[];//将unselCts清空
      break;
是<<,就将selCts拼接到unselCts结尾,再保存回unselCts中

    case "&lt;&lt;"://
      unselCts=unselCts.concat(selCts);
      selCts=[];//将selCts清空
      break;
是>, 查找id为unsel下的所有option,保存在变量opts中

    case "&gt;":
      var opts=document.querySelectorAll(
        "#unsel>option"
      );
反向遍历opts中每个opt

    for(var i=opts.length-1;i>=0;i--){
        for(var i=0;i<opts.length;i++){
        //如果当前opt的selected为true//为什么用true判断
        if(opts[i].selected){
          //删除unselCts数组中当前位置的元素,再将删除的元素拼接到selCts中
          selCts.push(unselCts.splice(i,1));
        }
    }
    break;
是<,就查找id为sel下的所有option,保存在变量opts中
    case "&lt;":
      var opts=document.querySelectorAll(
        "#sel>option"  
      );
反向遍历opts中每个opt

      for(var i=opts.length-1;i>=0;i--){
        for(var i=0;i<opts.length;i++){
        //如果当前opt的selected为true
        if(opts[i].selected){
          //删除selCts数组中当前位置的元素,再将删除的元素拼接到unselCts中
          unselCts.push(selCts.splice(i,1));
        }
      }
  }

将unselCts按国家名称升序排列

unselCts.sort();
将selCts按国家名称升序排序

selCts.sort();
查找id为unsel的元素,保存在unsel中

var unsel=document.getElementById("unsel");
将unselCts数组的内容更新到unsel元素中

 updateSel(unselCts,unsel);
查找id为sel的元素,保存在sel中

  var sel=document.getElementById("sel");
将selCts数组的内容更新到sel元素中

  updateSel(selCts,sel);
}

设置sel的内容为:arr按?拼接,补上开头和结尾

function updateSel(arr,sel){
  sel.innerHTML=("<option>"+
    arr.join("</option><option>")
    +"</option>");
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 缭绕在小岛的情思是刺槐花的颜色, 因那小鱼村就坐落在刺槐林里。 刺槐花开的季节海浪花也特好看, 而最好看的是她穿着...
    程力ZKX阅读 301评论 0 1
  • 今天看了由优秀主持人撒贝宁主播的青年公开课堂《开讲啦》 ,这也是我最喜欢的综艺节目之一。 其中一期是比亚迪总裁王传...
    阿丹dan阅读 258评论 0 2
  • 亲爱的爸爸妈妈: 我是你们最疼爱的女儿艳平,以前老觉着自己是最不被疼爱的一个,可现在回头想想,自己却是被爱的最多、...
    为爱分享阅读 133评论 0 0