效果图

1.准备一块盒子区域 id=“checkBoxList” 为例
//样式的简单介绍
style{
overflow:scroll; //让超出div 内容在div区域内以滚动条形式呈现
display: flex;  //搞一个弹性盒子容器
flex-wrap: wrap;align-content: flex-start; // 文本对齐方式 这里是上下元素的内容对齐
}
//这里行内样式举例
<div id="checkBoxList" style="overflow:scroll;height:93%;
display: flex;flex-wrap: wrap;align-content: flex-start; width: 100%;
padding-left: 10px">
 //这块区域待动态放复选框列表
 
</div>
 
2.准备一块文本域 textArea
<textarea id="textAreaId" rows="16" cols="70" placeholder="请选择复选框加载内容到此处..."
 style=" resize:none; font-size: 25px;font-family:'Microsoft YaHei';
 width: 100%;height: 100% ">这里不要留空白,看完删掉此处,否则鼠标不聚焦文本域左上方</textarea>
 
3.动态加载复选框列表项
这里加载列表项不允许以 “、”分割,为后续分割符使用
//页面初始化
$.parser.onComplete = function(res) {
	//页面打开执行或者手动点击加载
	dynamicLoadCheckboxList()
}
function dynamicLoadCheckboxList() {
	//清空文本域内容
    document.getElementById("textAreaId").value='';
	//清空盒子里内容
    $("#checkBoxList").html("");
    
    //后台请求复选框内数据列表  --简单一个sql查询语句
    $.post(BASE_PATH + "/xxxController/xxxxxxx.do", {}, function (res) {
        if (res.result == '200') {
          let  checkDataList= res.checkDataList;
            for(let j=0; j < checkDataList.length; j++ ){
            //在盒子中动态加载 checkbox元素列表
                $("#checkBoxList").append(
                    "<label style='font-size: 15px;width: 25%'>"
                    + "<input name='checkItem' type='checkbox'  value="
                    + checkDataList[j].checkName
                    + ">"
                    + checkDataList[j].checkName
                    +"</label>"
                );
                //每四个元素内容一行                
                if( (j+1) % 4 == 0){
                    $("#checkBoxList").append("<br>");
                }
            }     
        } else {
            showMessage(res.Msg);
        }
    }, "JSON");
}
 
4.对盒子内复选框列表项进行监听
$("#checkBoxList").on('click', function () {
		//获取文本域内容
		let textArea = "textAreaId";
		//复选框选择勾选遍历每一项元素
		$("input[name=checkItem]:checkbox:checked").each(function () {
			//获取当前遍历的复选框值  上边代码中input 内 value="checkName" 就是取这个value
			let str = $(this).val().toString();
			let flag = $(this).context.checked;//取复选框勾选状态 这里是true 
			selectCheckedHandle(flag,str,textArea);
		});
		
		//复选框取消勾选遍历每一项元素
		$("input[name=checkItem]:not(:checked)").each(function() {
			let deletestr = $(this).val().toString();
			unSelectUncheckedHandle(deletestr,checkIdArea);
		});
	});
//遍历选择复选框处理
function selectCheckedHandle(flag,str,checkIdArea) {
    debugger
    let ele = document.getElementById(checkIdArea);
    let reg = /\s+/g;//去除空白区域
    if (typeof ele.value === 'string') {
        ele.value = ele.value.replace(reg, '');
    }
    if (ele.value.lastIndexOf('、') != ele.value.length -1){
        ele.value = ele.value+'、';
    }
    if (typeof str === 'string') {
        str = str.replace(reg, '');
    }
    if (flag) {
        if (str.length > 0) {
            if (ele.value.indexOf(str) == -1) {
                ele.value = ele.value.concat(str+'、');
            } else {
                let flag = undefined;
                let tempArr = ele.value.split("、");
                for (let i = 0; i < tempArr.length; i++) {
                    if (tempArr[i] == str) {
                        flag = true;
                        break;
                    }else {
                        flag = false;
                    }
                }
                if (flag == false){
                    ele.value = ele.value.concat(str+'、');
                }
            }
        }
    }
}
//遍历取消勾选复选框处理
function unSelectUncheckedHandle(deletestr,checkIdArea) {
    debugger
    let ele = document.getElementById(checkIdArea);
    let reg = /\s+/g;
    if (typeof ele.value === 'string') {
        ele.value = ele.value.replace(reg, '');
    }
    if (typeof deletestr === 'string') {
        deletestr = deletestr.replace(reg, '');
    }
    let deleteArr = ele.value.split("、");
    for (let i = 0; i < deleteArr.length; i++) {
        if (deleteArr[i] == deletestr) {
            deleteArr.splice(i,1);
            ele.value = deleteArr.join("、");
        }
    }
}
 
5.解释字符串处理常用方法无效
为什么没用search(),match(),lastIndexOf()??
因为这些只能查找字符串的子元素的首个位置或者下标位置,但是不容易查找第二个,或许可以搭配正则表达式,进行完全匹配是否是寻找的那个复选框内容,如果不是,可以继续,但是不能确定找到的第二个长度是多长,所以用了数组分割
 简单说没有使用好正则表达式,下面是我的思路未解全....后续有空再说
dynamicStr   //为复选框所携带的字符串内容
//首个下标  
 let currentLocat  =  str.indexOf(dynamicStr)  
// 用正则表达匹配,如果是false,继续下一个
while(!RegExp("^" + 'dynamicStr' + "$").test('dynamicStr')){//false的话继续
    currentLocat = str.indexOf(dynamicStr,currentLocat+1);
    if(currentLocat >-1){
//       继续正则比对  
	}
}
 
生成动态正则表达式 RegExp方法
生成动态 /^dynamicStr$/
console.log( RegExp("^" + 'dynamicStr' + "$"))
//举例
console.log(RegExp("^" + 'dynamicStr' + "$").test('dynamicStr')) //true
                


















