2015-03-03 4 views
1

Я пытаюсь изменить это, если еще к коммутатору:Если еще для переключения случай с другим выходом

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'); 
} 

Однако это не эквивалент, потому что я всегда получая случай по умолчанию.

Что не так?

+0

Как выглядит ваш HTML-код? Если у детей есть как data-company_id, так и data-user_id, вы всегда будете сталкиваться с первым случаем. – mkaatman

+0

Является ли переход на коммутатор чисто косметическим, или вам это нужно по другим причинам? –

+0

@mkaatman У html есть data-company_id или data-user_id. не оба – XSFg

ответ

5

Вы можете добавить data-category, который был установлен в «компании» или «пользователя» и включите это.

+0

Чтобы переосмыслить проблему и найти более чистую альтернативу, попробуйте мой голос. – blex

+0

http://jsfiddle.net/o4j32yue – sheriffderek

2

Ваши два кода не делают то же самое.

Вы меняете от:

if ($(check).attr("data-user_id") == true) 

в

switch (check) { 
    case $(check).attr('data-user_id') : 

, что означает:

if (check == $(check).attr("data-user_id")) 
2

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') 
Смежные вопросы