根据URL调用其他变量

时间:2012-10-31 15:50:52

标签: javascript jquery

我有这段代码:

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

我需要使用不同的变量(mods1,modsN,...),具体取决于使用此脚本的URL。

网址始终具有相同的结构:

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

“数字”部分是我可以用来区分页面的部分。

js使用我的示例代码运行:http://jsfiddle.net/RZHxz/

4 个答案:

答案 0 :(得分: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 :(得分: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

答案 2 :(得分: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) {
    // ...
});

答案 3 :(得分: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];

第二个返回数字,如果它在网址中,或number,如果它不是