请问这段代码如何缩写?

increaseDom:function(){

    var that=this;
    var NewOSelects=$('.NewOrders:eq(0)').find('select');    
    NewOSelects.each(function(i, el) {
        /*蠢的一笔,但是就是缩减不起来,无法获取到非自己的元素*/
        /*if(NewOSelects.length>1){
            if(NewOSelects.eq(0).val()==1){
                NewOSelects.eq(1).find("option:eq(1)").attr("disabled","disabled");
                NewOSelects.eq(2).find("option:eq(1)").attr("disabled","disabled");
                NewOSelects.eq(0).find("option:eq(2)").attr("disabled","disabled");
                NewOSelects.eq(0).find("option:eq(3)").attr("disabled","disabled");
            }else if(NewOSelects.eq(0).val()==2){
                NewOSelects.eq(1).find("option:eq(2)").attr("disabled","disabled");
                NewOSelects.eq(2).find("option:eq(2)").attr("disabled","disabled");
                NewOSelects.eq(0).find("option:eq(1)").attr("disabled","disabled");
                NewOSelects.eq(0).find("option:eq(3)").attr("disabled","disabled");
            }else if(NewOSelects.eq(0).val()==3){
                NewOSelects.eq(1).find("option:eq(3)").attr("disabled","disabled");
                NewOSelects.eq(2).find("option:eq(3)").attr("disabled","disabled");
                NewOSelects.eq(0).find("option:eq(1)").attr("disabled","disabled");
                NewOSelects.eq(0).find("option:eq(2)").attr("disabled","disabled");
            };
            if(NewOSelects.eq(1).val()==1){
                NewOSelects.eq(0).find("option:eq(1)").attr("disabled","disabled");
                NewOSelects.eq(2).find("option:eq(1)").attr("disabled","disabled");
                NewOSelects.eq(1).find("option:eq(2)").attr("disabled","disabled");
                NewOSelects.eq(1).find("option:eq(3)").attr("disabled","disabled");
            }else if(NewOSelects.eq(1).val()==2){
                NewOSelects.eq(0).find("option:eq(2)").attr("disabled","disabled");
                NewOSelects.eq(2).find("option:eq(2)").attr("disabled","disabled");
                NewOSelects.eq(1).find("option:eq(1)").attr("disabled","disabled");
                NewOSelects.eq(1).find("option:eq(3)").attr("disabled","disabled");
            }else if(NewOSelects.eq(1).val()==3){
                NewOSelects.eq(0).find("option:eq(3)").attr("disabled","disabled");
                NewOSelects.eq(2).find("option:eq(3)").attr("disabled","disabled");
                NewOSelects.eq(1).find("option:eq(1)").attr("disabled","disabled");
                NewOSelects.eq(1).find("option:eq(2)").attr("disabled","disabled");
            };
        }*/

        
    });
},
阅读 2.9k
6 个回答

看得我头皮发麻,你想要实现一个什么功能能一起贴出来吗?就我能了解到的信息,你至少可以先用一个策略模式来改变这 满屏 ifelse的困境,比如说:

if(NewOSelects.eq(0).val()==1){
    NewOSelects.eq(1).find("option:eq(1)").attr("disabled","disabled");
    NewOSelects.eq(2).find("option:eq(1)").attr("disabled","disabled");
    NewOSelects.eq(0).find("option:eq(2)").attr("disabled","disabled");
    NewOSelects.eq(0).find("option:eq(3)").attr("disabled","disabled");
}else if(NewOSelects.eq(0).val()==2){
    NewOSelects.eq(1).find("option:eq(2)").attr("disabled","disabled");
    NewOSelects.eq(2).find("option:eq(2)").attr("disabled","disabled");
    NewOSelects.eq(0).find("option:eq(1)").attr("disabled","disabled");
    NewOSelects.eq(0).find("option:eq(3)").attr("disabled","disabled");
}else if(NewOSelects.eq(0).val()==3){
    NewOSelects.eq(1).find("option:eq(3)").attr("disabled","disabled");
    NewOSelects.eq(2).find("option:eq(3)").attr("disabled","disabled");
    NewOSelects.eq(0).find("option:eq(1)").attr("disabled","disabled");
    NewOSelects.eq(0).find("option:eq(2)").attr("disabled","disabled");
};
var handle = {
    "type_1" : function(NewOSelects){
        NewOSelects.eq(1).find("option:eq(1)").attr("disabled","disabled");
        NewOSelects.eq(2).find("option:eq(1)").attr("disabled","disabled");
        NewOSelects.eq(0).find("option:eq(2)").attr("disabled","disabled");
        NewOSelects.eq(0).find("option:eq(3)").attr("disabled","disabled");
    }
    ....
}

//调用
handle["type_"+NewOSelects.eq(0).val()](NewOSelects);

其他的还可以继续优化,但太多了,写起来很烦就算了。。。自己想办法提取出能够合并的项,然后把变化的部分当成参数发过去就行了。。

我这做了两个假设
一是NewOSelects只有0,1,2
二是option只有1,2,3

不符合的话你再告诉我...

然后缩减实际上就是求补集

if (NewOSelects.length > 1) {
  let value
  
  value = NewOSelects.eq(0).val();
  NewOSelects.not(':eq(0)').find(`option:eq(${value})`).attr("disabled", "disabled");
  NewOSelects.eq(0).find('option').not(`:eq(${value})`).attr("disabled", "disabled");

  value = NewOSelects.eq(1).val();
  NewOSelects.not(':eq(1)').find(`option:eq(${value})`).attr("disabled", "disabled");
  NewOSelects.eq(1).find('option').not(`:eq(${value})`).attr("disabled", "disabled");
}

楼主你多动动脑子啊,你就不能自己封装一个方法吗?兄弟,看的都不爽

建议你把整个片段连带html结构给出, 极有可能就是一句代码的事儿

你把HTML代码贴出来和把业务逻辑说明白,比看你写的代码好理解得多。

看到这钟代码我脑子里面第一个闪现过的是 草拟吗!懒得说-

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题