Javascript 有很多重复的短代码

Javascript 有很多重复的短代码,javascript,jquery,Javascript,Jquery,我不太擅长编程,但我总是尽我最大的努力。在下面的代码中,您将看到许多重复。我试着把它缩短,但我觉得它仍然很难看 我如何改进它,减少重复性 $("#searchterm").keyup(function(e){ var q = $("#searchterm").val(); if(e.keyCode==13){ if(q.substr(0,2) == "A;"){ $("#imagedocu_art").val("A");

我不太擅长编程,但我总是尽我最大的努力。在下面的代码中,您将看到许多重复。我试着把它缩短,但我觉得它仍然很难看

我如何改进它,减少重复性

   $("#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);
    }

您可以将第一个
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 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];
}
事实上,您的整个方法可以被以下内容替代:

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 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];
}

您可以将第一个
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 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];
}
事实上,您的整个方法可以被以下内容替代:

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 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];
}

正则表达式可以替换所有的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的基本解释

/reg exp的开始
^字符串开头
(捕获组的开始)
[ABTD]匹配[]中包含的任何字符
|或
DD匹配字符串“DD”
)捕获组结束
;       匹配分号
(*)匹配所有剩余的
/Reg Exp结束
比赛就要开始了

null或[“A;FOO”,“A”,“FOO”]或[“DD;FOO”,“D”,“FOO”]

正则表达式可以替换所有的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的基本解释

/reg exp的开始
^字符串开头
(捕获组的开始)
[ABTD]匹配[]中包含的任何字符
|或
DD匹配字符串“DD”
)捕获组结束
;       匹配分号
(*)匹配所有剩余的
/Reg Exp结束
比赛就要开始了

null或[“A;FOO”,“A”,“FOO”]或[“DD;FOO”,“D”,“FOO”]

在第二个代码中,您有
q.split(“;”,2)但这是否适用于
DD
?Thanks@JohnSmith“是的,的确如此。”约翰斯米特实际上我刚刚意识到,如果你有
在您关心的字符串中的第一个之后,您可能应该使用
q.split(/;(.*)/,2)
。我相应地更新了我的答案。在你的第二个代码中,你有
q.split(“;”,2)但这是否适用于
DD
?Thanks@JohnSmith“是的,的确如此。”约翰斯米特实际上我刚刚意识到,如果你有
在您关心的字符串中的第一个之后,您可能应该使用
q.split(/;(.*)/,2)
。我相应地更新了我的答案。这完全是风格的问题。您可能需要考虑添加更多的细节。
q
的预期值是多少?它似乎有特定的格式。2或3个字母后接分号,再接一些字符以输入imagedocu__文本。但是q的值是枚举的吗?此代码的要求是什么?好的,要求是检查输入值,然后修改它!但这只是一个片段!谢谢,这都是风格的问题。您可能需要考虑添加更多的细节。
q
的预期值是多少?它似乎有特定的格式。2或3个字母后接分号,再接一些字符以输入imagedocu__文本。但是q的值是枚举的吗?此代码的要求是什么?好的,要求是检查输入值,然后修改它!但这只是一个片段!感谢我认为,在半结肠之后需要Q的子串,可以考虑<代码> /^([ABTD)* DD);(*)$/< /代码>,然后使用匹配(2)来计算文本的值。(.*)$/
然后使用匹配[2]作为此文本的值。