我正试图将此if else更改为开关:
var check = $(".fav_c").children();
if ($(check).attr("data-user_id")){
console.log('users');
}
else if ($(check).attr("data-company_id")){
console.log('companies');
}
对此:
var check = $('.fav_c').children();
switch (check) {
case $(check).attr('data-user_id') :
console.log('users');
break;
case $(check).attr('data-company_id') :
console.log('companies');
break;
default:
console.log('default');
}
然而,这并不等同,因为我总是得到默认情况。
怎么了?
您可以添加设置为"company"或"user"的data-category
并打开它。
您的两个代码不做相同的事情。
您正在从以下位置更改:
if ($(check).attr("data-user_id") == true)
至
switch (check) {
case $(check).attr('data-user_id') :
这意味着:
if (check == $(check).attr("data-user_id"))
switch
用于比较两个值。在您的情况下,它不等同于if
。
实际上,你的switch
翻译成if
就是
var check = $('.fav_c').children();
if (check == $(check).attr('data-user_id') {
console.log('users');
} else if (check == $(check).attr('data-company_id')) {
console.log('companies');
} else {
console.log('default');
}
正如你所看到的,这没有任何意义。
解决方案
也许你可以试试这个破解:
var check = $('.fav_c').children();
switch (true) {
case !!$(check).attr('data-user_id') :
console.log('users');
break;
case !!$(check).attr('data-company_id') :
console.log('companies');
break;
default:
console.log('default');
}
请注意,在每种情况下都添加了!!
。它们在这里强制值为bool
。
这将转化为(对于第一种情况)
true == !!$(check).attr('data-user_id')