2014-01-09 35 views
0

是有辦法,我可以創造一個switch語句與邏輯通配符:通配符添加到JavaScript switch語句

case: '/jobs/'+WILDCARD and ending in +'-jobs' : 

這是對window.location.pathname,這可能是「/jobs/design-jobs'或'/ jobs/engineer-jobs'等

但是,還有其他以'/ jobs'開頭的頁面我不希望這適用於,例如'/ jobs/'

或者有更好方法的建議嗎?

+0

不,afaik這隻能用正則表達式來完成。而'case:'標籤必須是一個文字值。 – nietonfir

回答

0

一個技巧可能是使用功能正常化交換機的輸入,把可變投入到具體的案例:

相反的:

switch(input) { 
    case 'something': // something 
    case 'otherthing': // another 
    case '/jobs/'+WILDCARD: // special 
} 

你可以這樣做:

function transformInput (input) { 
    if (input.match(/jobs.*-jobs/) return 'JOBS'; 
    return input; 
} 

switch(transformInput(input)) { 
    case 'something': // something 
    case 'otherthing': // another 
    case 'JOBS': // special 
} 
+1

謝謝!用法如下:var curPage = window.location.pathname.match(/ jobs。* - jobs /)? 'search-results':window.location.pathname;開關(curPage){} – rpsep2

1

不,沒有switch聲明的通配符,但您可以例如使用RegExp和測試反對:

你可以在某些情況下使用
if(path.match(/^\/jobs\/(.*)-jobs$/) !== null) { 
    //jobs url 
} else { 
    switch(path) { 
     case '/jobs/post': 
      //something else 
      break; 
    } 

} 
+0

或者你可以通過函數 – Yang

+0

@djay將其抽象出來。當然,對於OP來說,它是如何做到這一點,以便它符合他的代碼。 –

0

你可以做事端g像這樣:

var categories = { 
    design: function(){ console.log('design'); }, 
    engineer: function(){ console.log('engineer'); } 
}; 

for(var category in categories) 
    if(window.location.pathname === '/jobs/' + category + '-jobs') 
     categories[category]();