Javascript 使用for循环迭代器缩短函数
我正在尝试使用一些for循环将2.5k行函数缩短为更易于管理的函数。在做了很多修改之后,我成功地抑制了所有语法错误。然而,原本非常长但有效的函数,现在变成了一个短得多但失效的函数。有人能解释一下我做错了什么吗 这就是我要做的事情的本质:Javascript 使用for循环迭代器缩短函数,javascript,jquery,Javascript,Jquery,我正在尝试使用一些for循环将2.5k行函数缩短为更易于管理的函数。在做了很多修改之后,我成功地抑制了所有语法错误。然而,原本非常长但有效的函数,现在变成了一个短得多但失效的函数。有人能解释一下我做错了什么吗 这就是我要做的事情的本质: function countryChange() { //Blank auto complete box for(var i=0; i<30; i++){ for(var q=5; q<7; q++){
function countryChange() {
//Blank auto complete box
for(var i=0; i<30; i++){
for(var q=5; q<7; q++){
for(var u=0; u<3; u++){
$("#_Q6_Q".concat(toString(i),"_Q", toString(q), "_Q0_Q", toString(u))).val('');
};
};
$("#_Q6_Q".concat(toString(i),"_Q4_Q0_Q0")).val('');
};
函数countryChange(){
//空白自动完成框
对于(var i=0;i,最好使用jQuery的内置sizzle选择器:
function countryChange() {
$("[id^='_Q6_Q'],[id^='_Q'], [id^='_Q0_Q'], [id^='_Q4_Q0_Q0']").val('');
};
如果愿意,还可以进行通配符和部分匹配
以下是选择器参考指南:我建议您拆分问题,创建稍后将在数组中处理的数字,然后定义处理函数,然后处理数组:
function createArray () {
var res=[];
var i,q,u;
for(i=0; i<30; i++){
for(q=5; q<7; q++){
for(u=0; u<3; u++) {
res.push([i:i, q:q, u:u]);
};
};
};
}
// just build it once and store it
var myIndexes = createArray();
与:
function resetAutoCompleteComboBox(a) {
var i=toString(a.i);
var q=toString(a.q);
var u=toString(a.u);
$("#_Q6_Q" + i + "_Q" + q + "_Q0_Q" + u)).val('');
}
如果您利用处理函数的相似性,您可能还可以进行一些其他有用的代码分解。toString是在其他地方定义的函数?难道您不能只写$('[id^=“\u Q6\u Q”]')。val('')
来清空id以\u Q6\u Q
开头的所有元素吗?您忘了右括号}
还是故意的?除了johnnycardy
注释:如果你没有自己定义toString
,那么你调用窗口的toString
,这将导致[对象对象]
。你可以尝试字符串(i)
,看看你的结果是正确的还是正确的。concat(i,…)
.为什么要使用.concat()
和toString()
呢?$(“#uq6_Q”+i+“Q”+Q+“Q0_Q”+u)
这是一种非常简洁的方式来压缩所有内容。谢谢。我会使用它!但代码的问题是我在应该是string()的时候使用了toString(),或没有一些人提到的任何功能。
function resetAutoCompleteComboBox(a) {
var i=toString(a.i);
var q=toString(a.q);
var u=toString(a.u);
$("#_Q6_Q" + i + "_Q" + q + "_Q0_Q" + u)).val('');
}