有很多重复的短代码

时间:2013-12-10 23:04:56

标签: javascript jquery

我在编程方面不是很熟悉,但我总是尽我所能。在以下代码中,您将看到很多重复。我试图缩短它,但我认为它仍然非常难看。

我怎样才能改善这一点,减少重复次数?

   $("#searchterm").keyup(function(e){
    var q = $("#searchterm").val();

    if(e.keyCode==13){
        if(q.substr(0,2) == "A;"){
            $("#imagedocu_art").val("A");
            $("#imagedocu_text").val(q.substr(2))
            $("#new_imagedocu").submit();           
        }
        if(q.substr(0,2) == "B;"){
            $("#imagedocu_art").val("B");
            $("#imagedocu_text").val(q.substr(2))
            $("#new_imagedocu").submit();           
        }
        if(q.substr(0,2) == "T;"){
            $("#imagedocu_art").val("T");
            $("#imagedocu_text").val(q.substr(2))
            $("#new_imagedocu").submit();           
        }
        if(q.substr(0,2) == "D;"){
            $("#imagedocu_art").val("D");
            $("#imagedocu_text").val(q.substr(2))
            $("#new_imagedocu").submit();           
        }
        if(q.substr(0,3) == "DD;"){
            $("#imagedocu_art").val("DD");
            $("#imagedocu_text").val(q.substr(3))
            $("#new_imagedocu").submit();           
        }
    }


    if((q.substr(0,2) == "D;") || (q.substr(0,3) == "DD;")){
    if(q.substr(0,2) == "D;"){
      var text = q.substr(2);
    }else{
      var text = q.substr(3);
    }

2 个答案:

答案 0 :(得分:4)

正则表达式可以替换所有if检查。

if (e.keyCode==13) {
    var match = q.match(/^([ABTD]|DD);(.*)/);
    if (match) {
        $("#imagedocu_art").val(match[1]);
        $("#imagedocu_text").val(match[2]);
        $("#new_imagedocu").submit();           
    }
}

reg exp的基本解释

/       Start of reg exp
^       Start of string
(       Start of capture group
[ABTD]  Match any character included inside the []
|       OR
DD      Match the String "DD"
)       End of capture group
;       Match a semicolon
(.*)    Match all the remaining
/       End of Reg Exp

比赛将转为

null or ["A;FOO", "A", "FOO"] or ["DD;FOO", "D", "FOO"]

答案 1 :(得分:2)

您可以使用以下内容替换您的第一个if块:

var values = ["A", "B", "T", "D", "DD"];
for(var i = 0; i < values.length; i++) {
    var len = values[i].length + 1;
    if(q.substr(0, len) == values[i] + ";"){
        $("#imagedocu_art").val(values[i]);
        $("#imagedocu_text").val(q.substr(len));
        $("#new_imagedocu").submit();
        break;
    }
}

或者您可以使用查找:

var values = { A: 1, B: 1, T: 1, D: 1, DD: 1 };
 var parts = q.split(/;(.*)/, 2);
if(parts[0] in values){
    $("#imagedocu_art").val(parts[0]);
    $("#imagedocu_text").val(parts[1]);
    $("#new_imagedocu").submit();
}

实际上你的整个方法可以用这样的东西代替:

var q = $("#searchterm").val();
var values = { A: false, B: false, T: false, D: true, DD: true };

var parts = q.split(/;(.*)/, 2);

if(e.keyCode==13){
    if(parts[0] in values){
        $("#imagedocu_art").val(parts[0]);
        $("#imagedocu_text").val(parts[1]);
        $("#new_imagedocu").submit();
    }
}

if(parts[0] in values && values[parts[0]]){
    var text = parts[1];
}