Layui Tree组件使用setChecked设置默认选中项多的情况下加载速度过慢的问题

layuitree.js树形组件优化(默认选中项过多时加载缓慢问题解决)资源-CSDN文库

文件已经上传,有需要的可以直接下载使用

前阵子做一个项目,后台有一个省市联动的功能,需要用到layui 的tree组件,省市都是可选中项,用户选择指定的多个省或者市保存以后下载重新打开自动设置上次选中项,当选中的选项很多的时候,

重新打开页面加载就会十分的缓慢,慢到不能忍的地步,加载一个页面可能要10几秒以上,简直不能忍

经过检查后发现,之所以选中项多的时候加载慢是因为使用了 reInput.click();方法来设置checkbox选中状态,这样在数据很多的时候,会执行很多的click事件,导致加载很慢。

所以修改了tree组件设置选中项的实现逻辑,有click选中改为dom节点设置选中,然后性能得到了很大的提升,修改之后再点击默认选中项很多的页面事,很快就可以加载完毕.

以下是修改前的代码

  //若返回数字
      if(typeof checkedId === 'number'){
        if(thisId == checkedId){
          if(!input[0].checked){
            reInput.click();
          };
          return false;
        };
      } 
      //若返回数组
      else if(typeof checkedId === 'object'){
        layui.each(checkedId, function(index, value){
          if(value == thisId && !input[0].checked){
            reInput.click();
            return true;
          }
        });
      };

以下是修改后的代码

 if (item.length > 0) {
            //若返回数字
            if (typeof checkedId === 'number') {
                if (thisId == checkedId) {
                    if (!input[0].checked) {
                        reInput.click();
                    };
                    return false;
                };
            }
            //若返回数组
            else if (typeof checkedId === 'object') {
                layui.each(checkedId, function (index, value) {
                    if (value == thisId && !input[0].checked) {
                        //使用click()事件来选中当前节点,当默认选中项很多的时候加载速度太慢
                        //reInput.click();
                        //return true;
                        //设置当前节点input选中
                        input.prop("checked", "checked");
                        //设置当前节点上级input选中
                        input.parents(".layui-tree-pack").prev(".layui-tree-entry").children(".layui-tree-main").find('input[same="layuiTreeCheck"]').prop("checked", "checked");
                    }
                });
            };
        }
    });
      that.renderForm('checkbox');//重新渲染checkbox选中
  };

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值