JavaScript 下拉列表左右选择 案例

功能描述

网页设置两个复选框,分别置入一些选项。
下面分别置入两个按钮,点击左边的按钮可以把左边选中的选项移动至右边。右边同理。
如下图所示:
在这里插入图片描述

分析

  • HTML页面设计
    <select name="left" id="left" multiple="multiple" size="7" style="width: 100px;height: 100px;">
    	<option value="">洪世贤</option>
    	<option value="">林品如</option>
    	<option value="">艾莉</option>
    	<option value="">唐三藏</option>
    	<option value="">孙悟空</option>
    </select>
    <select name="right" id="right" multiple="multiple" size="7" style="width: 100px;height: 100px;">
    	<option value="">洪尚恩</option>
    	<option value="">洪国荣</option>
    	<option value="">猪八戒</option>
    	<option value="">沙和尚</option>
    </select>
    
  • 按钮绑定事件。
    <input type="button" value="" onclick="addToRight()" style="width: 100px;" />
    <input type="button" value="" onclick="addToLeft()" style="width: 100px;" />
    
  • JavaScript函数思路:
    1. 获取左边的下拉列表对象。
      var left = document.getElementById("left");
      
    2. 读取左边的选项元素至一个集合。
      就是获取下拉列表的子节点,使用getElementsByTagName()方法。
      var leftop = left.getElementsByTagName("option");
      
    3. 获取右边的下拉列表对象。
      var right = document.getElementById("right");
      
    4. 遍历左边的选项元素,如果是选中的状态,就把它添加到右边。
      关键代码
      判断选中状态:使用selected属性,true为选中,false反之。
      添加到右边:使用appendChild()方法。
      值得注意的是,每次遍历,集合的长度都会减少,而i的值会依次增加,就导致了每取一个就会跳过一个。为了避免这种情况,我们在判断真执行的时候使用i–来规避。
      for(var i = 0; i < rightop.length; i++) {
      				if(rightop[i].selected) {
      					left.appendChild(rightop[i]);
      					i--;
      				}
      			}
      

代码

<body>
	<select name="left" id="left" multiple="multiple" size="7" style="width: 100px;height: 100px;">
		<option value="">洪世贤</option>
		<option value="">林品如</option>
		<option value="">艾莉</option>
		<option value="">唐三藏</option>
		<option value="">孙悟空</option>
	</select>
	<select name="right" id="right" multiple="multiple" size="7" style="width: 100px;height: 100px;">
		<option value="">洪尚恩</option>
		<option value="">洪国荣</option>
		<option value="">猪八戒</option>
		<option value="">沙和尚</option>
	</select>
	<br />
	<input type="button" value="" onclick="addToRight()" style="width: 100px;" />
	<input type="button" value="" onclick="addToLeft()" style="width: 100px;" />
	<script type="text/javascript">
		function addToRight() {
			var left = document.getElementById("left");
			var right = document.getElementById("right");
			var leftop = left.getElementsByTagName("option");

			for(var i = 0; i < leftop.length; i++) {
				if(leftop[i].selected) {
					right.appendChild(leftop[i]);
					i--;
				}
			}
		}

		function addToLeft() {
			var left = document.getElementById("left");
			var right = document.getElementById("right");
			var rightop = right.getElementsByTagName("option");
			
			for(var i = 0; i < rightop.length; i++) {
				if(rightop[i].selected) {
					left.appendChild(rightop[i]);
					i--;
				}
			}
		}
	</script>
</body>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值