jq中遍历flag:true/false减少无用的判断

在使用jq过程中,需用到array.some()、.every()类似的方法,假如在jq遍历元素集合取值,暂时不可使用ES5、ES6 语法
简单的例子:在一个二级菜单中加载三级菜单,选中三级菜单,添加到指定区域,再次选择从指定区域删除,对于二级菜单也是同样操作,且二级和三级不可同时存在,大概就是需求描述。
思路:获得三级菜单数据,jq中拼接展示时,需判断三级菜单之前是否被选择过,有唯一值id判断,根据id是否相同,来展示三级菜单按钮的状态。(在此过程中就犯糊涂了,平时到是使用,关键又迷糊了)
假如右侧选择了三级菜单,点击对应的二级菜单展示三级菜单,三级菜单要是选中的状态,在遍历的二级菜单中遍历三级菜单,并拿三级菜单的id和右侧选中的id作对比是否相同,相同标记选中,不相同同正常拼接展示,错误代码如下:

// 为了效果拼接数据。。。。不推荐不推荐不推荐!!!!
// 不论看着多难受,将就看吧,没法!
// 弹窗拼接三级菜单数据
if (level2.consultList && level2.consultList.length > 0 && level2.consultList[0]) {
  for (var j = 0; j < level2.consultList.length; j++) {
      var level3 = level2.consultList[j]
      var divArr = $('.content .cont-item');
      if (divArr && divArr.length > 0) { // 右侧有选择 判断子级有没有被选择
          $.each(divArr, function (i, item) {
            if ($(item).attr('data-id') == level3.id) {
              html += '
' + level3.name + '
' } else { html += '
' + level3.name + '
' } }) } else { html += '
' + level3.name + '
' } } }

假如divArr的长度是2(a,b),二级菜单中的三级长度2(A,B),中间有段循环
if (divArr && divArr.length > 0) { 传的乱七八糟的就不写了,在这个循环中会循环4遍,结果就是拼接4个div,两个相同的,只是选中与不选中的区别,相当于A与a、b遍历一遍得出两个结果,B与a、b遍历一遍得出两个结果,
但是想要的是A与ab遍历一遍得一个结果,B与ab遍历一遍得一个结果,
所以只需用一个值_class标志一下循环中有没有选中的即可,如下:

if (level2.consultList && level2.consultList.length > 0 && level2.consultList[0]) {
  for (var j = 0; j < level2.consultList.length; j++) {
     var level3 = level2.consultList[j]
     var divArr = $('.content .cont-item');
     if (divArr && divArr.length > 0) {//右侧有值
       var _class = ''
       $.each(divArr, function (i, item) {// 右侧有值选中  弹窗展开默认选中
         if ($(item).attr('data-id') == level3.id) return _class = 'disabled'
       })
     }
     html += '
' + level3.name + '
' } }

看着也没那么啰嗦,最常见最常用的标志而已,记录下犯糊涂的瞬间,老项目维护不得不用这!!!
效果如下:


image.png

你可能感兴趣的:(jq中遍历flag:true/false减少无用的判断)