我不太擅长编程,但我总是尽力而为。在下面的代码中你会看到很多重复。我试图缩短它,但我认为它仍然很丑。
我该如何改进它,以减少重复?
$("#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 检查。
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"]
关于javascript - 代码很短,有很多重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20507231/