[英]How to shorten my nested if/else statement?
I have the following js code: 我有以下js代码:
var currentUrl = location
if(/s01/.test(currentUrl)||/s02/.test(currentUrl)){
$('#info,#name').removeClass('onselect').addClass('offselect');
if(/s01/.test(currentUrl)){
$('#AA').removeClass('offselect').addClass('onselect');
} else if(/s02/.test(currentUrl)){
$('#BB').removeClass('offselect').addClass('onselect');
}
} else {
.....
}
The code has the same part in nested if/else statements: 该代码在嵌套的if / else语句中具有相同的部分:
if(/s01/.test(currentUrl) {
} else if(/s02/.test(currentUrl) {
}
Can I shorten it to something like: 我可以将其缩短为:
if(a){
} else if(b){
}
Or any other suggestions? 或其他建议?
An alternative version, which will give you option to expand in future: 替代版本,将为您提供将来扩展的选项:
var offelements = "#info,#name,#AA,#BB";
var onelements = "";
if (/s01/.test(currentUrl)) onelements = "#AA";
else if (/s02/.test(currentUrl)) onelements = "#BB";
// etc: else if (/s03/.test(currentUrl)) onelements = "#CC";
if (onelements !== "")
{
$(offelements).removeClass('onselect').addClass('offselect');
$(onelements).removeClass('offselect').addClass('onselect');
}
Also, if you add a class to all the items instead of using IDs, you could use: 另外,如果将类添加到所有项而不是使用ID,则可以使用:
var offelements = ".onoffelements";
Given 给定
var a = /s01/.test(currentUrl)
var b = /s02/.test(currentUrl)
You can do something like: 您可以执行以下操作:
if (a||b) {
$('#info,#name').removeClass('onselect').addClass('offselect');
if (a) {
$('#AA').removeClass('offselect').addClass('onselect');
} else if (b) {
$('#BB').removeClass('offselect').addClass('onselect');
}
} else {
...
}
or 要么
if (a) {
$('#info,#name').removeClass('onselect').addClass('offselect');
$('#AA').removeClass('offselect').addClass('onselect');
} else if (b) {
$('#info,#name').removeClass('onselect').addClass('offselect');
$('#BB').removeClass('offselect').addClass('onselect');
} else {
...
}
A slightly different approach for easier extensibility :) 稍有不同的方法,易于扩展:)
var mapUrlPartIds = { "s01": "AA", "s02": "BB" },
rxUrlParts = new RegExp(Object.keys(mapUrlPartIds).join("|")),
match = (currentUrl.match(rxUrlParts) || []);
if (match.length && mapUrlPartIds[match[0]]) {
$('#info,#name').removeClass('onselect').addClass('offselect');
$(mapUrlIds[match[0]]).removeClass('offselect').addClass('onselect');
}
Version with a single variable 带有单个变量的版本
Given 给定
var a = /s01/.test(currentUrl) << 0
+ /s02/.test(currentUrl) << 1
;
You can do something like: 您可以执行以下操作:
if(a){
$('#info,#name').removeClass('onselect').addClass('offselect');
if(a & (1<<0)){
$('#AA').removeClass('offselect').addClass('onselect');
} else
if(a & (1<<1)){
$('#BB').removeClass('offselect').addClass('onselect');
}
} else {
…
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.