这个逻辑文字描述好像很复杂,具体到实践功能就知道我想表达的是什么了。把逻辑想通了,这个功能也就写出来了,demo如下:

请转载此文的朋友务必附带原文链接,谢谢。

原文链接:http://xuyran.blog.51cto.com/11641754/1890678

逻辑思考之选择限定范围内的数量插入不指定位置并且具有替换功能_第1张图片




    
    
    
    
    
    *{
    	margin: 0px;
    	padding: 0px;
    	list-style: none;
    }
    .list{
    	padding: 10px;
    	border: solid 1px #000000;
    	width: 500px;
    	height: 200px;
    	margin-top: 20px;
    }
    .list li{
    	float: left;
    	width: 100px;
    	border-bottom: dashed 1px #C4C4C4;
    	padding-bottom: 5px;
    	margin-top: 20px;
    	margin-left: 20px;
    }
    .check{
    	float: left;
    	width: 8px;
    	height: 8px;
    	background: #FFFFFF;
    	border: solid 1px #000000;
    	border-radius: 50%;
		margin-top: 5px;
		margin-right: 10px;
    }
    .check.active{
    	background: #000000;
    }
    .bottom li{
    	
    }
    
    
    	$(function(){
    		var arr = []; //保存已经选中的项插入的对应的位置
    		$(".check").on("click",function(){
    			$(this).addClass("active");
    			var len = $(".top").find(".active").length; //已经选中的数量
    			var txt = $(this).parent().text(); //要插入的内容
    			if($(this).hasClass("active") && ifExist()&& len <= 4){  //状态:如果已经选中而且之前没有插入过同时总数量小于限定数量,则执行如下
	    			$(".bottom li").each(function(){
	    				var con = $(this).text();
    					if(!con){
    					arr[txt] = $(this).index(); 
    					$(this).html(txt);
    					return false;
    					}	
	    			});
    			}else if($(this).hasClass("active") && !ifExist()){  //状态:如果已经选中,之前已经插入过, 则执行如下
    				$(this).removeClass("active");
    				var index = arr[txt];  //读取当前选中之前插入的位置
    				$(".bottom li").eq(index).html("");
    			}else{
    				$(this).removeClass("active");
    				alert("最多只能选择4个");
    			}
    			function ifExist(){
    				var result;
					$(".bottom li").each(function(){ //遍历插入列表中要插入选项是否存在,如果存在返回false,否则返回true
	    				var con = $(this).text();
						if(con != txt){
							result = true;
						}else{
							result = false;
							return false;
						}
	    			});
	    			return result;
    			}
    		});
    	
    	})
    



	
  • 11111
  • 22222
  • 33333
  • 44444
  • 55555
  • 66666
  •