我在编程方面不是很熟悉,但我总是尽我所能。在以下代码中,您将看到很多重复。我试图缩短它,但我认为它仍然非常难看。
我怎样才能改善这一点,减少重复次数?
$("#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);
}
答案 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];
}