2012-10-31 52 views
0

的不同變量我有這樣的代碼:調用取決於URL

var mods1 = ['a', 'b', 'c', 'd']; 
var mods2 = ['1', '2', '3', '4']; 
var mods3 = ['js', 'hates', 'me', ':(']; 


jQuery('div').append('<ul class="modlist"></ul>'); 
jQuery.each(mods1, function(i) { 
    jQuery('<li/>').html(mods1[i]).appendTo('.modlist'); 
}); 

我需要使用取決於在使用這個腳本的URL的不同變量(mods1,modsN,...)。

的URL始終具有相同的結構:

http://www.example.com/NUMBER/
http://www.example.com/NUMBER/example/
http://www.example.com/NUMBER/example/example

「數量」 的部分是一個我可以使用頁面之間進行區分。

的jsfiddle我的示例代碼運行:http://jsfiddle.net/RZHxz/

回答

2

試試這個:

var url = "/1/example"; // location.pathname 
var id = url.split("/")[1]; 

mods = [ 
    ['a', 'b', 'c', 'd'], 
    ['1', '2', '3', '4'], 
    ['js', 'hates', 'me', ':('] 
]; 

jQuery('div').append('<ul class="modlist"></ul>'); 
jQuery.each(mods[id], function(i,v) { 
    jQuery('<li/>').html(v).appendTo('.modlist'); 
}); 

我做了mods到一個數組因爲這是如何你有效地訪問它們反正還有,each()函數傳遞值到處理函數作爲參數,所以你不需要再次去數組。

Example fiddle

+0

這工作完美,謝謝:) – Vegon

2

只是解析window.location

var url = location.pathname.substr(1), 
    arr_url = url.split('/'), 
    NUM = arr_url[0]; 

或者,如果你喜歡你的代碼更緊湊:

var NUM = location.pathname.substr(1).split('/')[0]; 
1

假設所有MODS變量在共同mods對象內,使用mods1默認:

var mods = { 
    mods1: ['a', 'b', 'c', 'd'], 
    mods2: ['1', '2', '3', '4'], 
    mods3: ['js', 'hates', 'me', ':('] 
}; 

var key = "mods" + (/^\/(\d+)/.exec(location.pathname) || [,1])[1]; 
$.each(mods[key], function(i) { 
    // ... 
}); 
+0

如果正則表達式找不到匹配,這將導致typeError:無法讀取null的屬性'1' –

+0

@EliasVanOotegem你是對的,誤了一點。現在應該沒問題。 – VisioN

1

如果你確定的數量將在那裏,你可以很容易地得到它,像這樣:

var urlNumber = parseInt(location.pathname.substr(1),10); // always use a radix 
//or, if the number needn't be there 
var urlNumber = (location.pathname.match(/^\/([0-9]+)\//) || ['no','number'])[1]; 

第二返回號碼,如果它在URL,或number如果它不是