2017阿里前端测试题(div模拟下拉列表)

<!DOCTYPE html>
<head>
  <meta charset="UTF-8">
  <title>body</title>
  <style>
	  #select{
	  	border: 1px rgb(221,221,221) solid;
	  	width: 120px;
	  	height: 20px;
	  	text-align: center;
	  }
	  .selectNode{
	  	position: relative;
	  	left: -1px;
	  	border: 1px rgb(221,221,221) solid;
	  	width: 120px;
	  	height: 20px;
	  }
	  .selectNode:hover{
	  	background-color: rgb(221,221,221);
	  	cursor: default;
	  }
	  .cursor {
         animation: blink 1s infinite;
         position: relative;
         top: -2px;
         left:-58px;
      }
		@keyframes blink {
		    0%, 100% {
		        color: black;
		    }
		    50% {
		        color: white;
		    }
		}
  </style>
</head>
<body>
  <div id="select"></div>

  <script>
	function select(options){
	  // your code here
	  //获取节点
	  var node = document.getElementById(options.srcNode.replace(/#/,""));
	  //点击事件
	  node.onclick = function(){
	  	var cursor,span,selectNode,textNode,sNodeLen;
	  	//删除子元素
	  	while(node.hasChildNodes())
		    {
		        node.removeChild(node.firstChild);
		    }
		//光标
	  	cursor = document.createTextNode("|"); 
  		span = document.createElement("span"); 
  		span.appendChild(cursor);
        span.setAttribute("class", "cursor");  
        node.appendChild(span);
        //开始添加动态子元素并绑定事件
        sNodeLen = document.getElementsByClassName("selectNode").length;
	  	if (sNodeLen == 0) 
	  	{
	  		options.data.forEach(function(item){
	  		textNode = document.createTextNode(item); 
	  		selectNode = document.createElement("div"); 
	  		selectNode.appendChild(textNode);
            selectNode.setAttribute("class", "selectNode");  
            node.appendChild(selectNode);
            //绑定事件
            selectNode.onclick = function(e){
            	//阻止冒泡事件
            	e.stopPropagation();
            	while(node.hasChildNodes())
			    {
			        node.removeChild(node.firstChild);
			    }
                node.appendChild(document.createTextNode(this.firstChild.nodeValue));
            } 
	  	    });
	  	}
	  	
	  };
	}
	
	// eg
	select({
	  srcNode: '#select',
	  data: ['北京','上海','杭州'],
	  onChange: (ev)=>{
	    console.log(ev.value); 
	  }
	})
  </script>
</body>
</html>

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值