2016-08-10 168 views
-2

我有三个函数来处理url参数,但它不够好,我的意思是它有点复杂,而我正在寻找简单的函数来使用所有这三个。获取多个url参数

function getUrlParameter(sParam) { // this function to get single parameter 
    var sPageURL = window.location.search.substring(1); 
    var sURLVariables = sPageURL.split('&'); 
    for (var i = 0; i < sURLVariables.length; i++) { 
     var sParameterName = sURLVariables[i].split('='); 
     if (sParameterName[0] == sParam) { 
      return sParameterName[1]; 
     } 
    } 
} 


function replaceUrlParam(paramName, paramValue) { // this to replace parameters value by other value 
    var currentUrl = window.location.href; 
    var pattern = new RegExp('(' + paramName + '=).*?(&|$)') 
    var newUrl = currentUrl.replace(pattern, '$1' + paramValue + '$2'); 
    if (newUrl == currentUrl && newUrl.indexOf(paramName + '=' + paramValue) == -1) { 
     newUrl = newUrl + (newUrl.indexOf('?') > 0 ? '&' : '?') + paramName + '=' + paramValue 
    } 
    window.history.pushState('', document.title, newUrl); 
    return newUrl; 
} 



function getUrlParameters() { // this to get all parameters 
    var sParam = 'p'; var viewParam = 'v'; var lanPram = 'l'; var ukomPram = 'uk'; var catPram = 'ca'; var ucatPram = 'uc'; 

    l = getUrlParameter(lanPram); 
    ukmun = getUrlParameter(ukomPram); 
    kat = getUrlParameter(catPram); 
    uKat = getUrlParameter(ucatPram); 
    pagenumber = getUrlParameter(sParam); 
    viewIndex = getUrlParameter(viewParam); 
    if (l || l == 0) { l = l; } else { l = replaceUrlParam(lanPram, 0); } 
    if (ukmun) { ukmun = ukmun; } else { ukmun = replaceUrlParam(ukomPram, 0); } 
    if (kat) { kat = kat; } else { kat = replaceUrlParam(catPram, 0); } 
    if (uKat) { uKat = uKat; } else { uKat = replaceUrlParam(ucatPram, 0); } 
    if (viewIndex) { viewIndex = viewIndex; } else { viewIndex = 'l'; } 
    if (pagenumber) { pagenumber = pagenumber; } else { pagenumber = 1; } 
} 

这个工作,但它调用许多功能replaceUrlParam和功能​​而大的事情,我不喜欢的是当网页加载时使用这些网址,然后,如果我想回到以前的页面也被追溯到每个参数

例如:如果有这个网址myfile.php?p=1&v=l&l=0&uk=0&ca=0&uc=0

然后如果我点击上一步上一个页面的浏览器我回去一个参数一样,

myfile.php?p=1&v=l&l=0&uk=0&ca=0然后再往前走,它停留在相同的页面中,像下一个参数myfile.php?p=1&v=l&l=0&uk=0等等,直到参数消失。

围绕这3个功能是否有简单的工作使它更容易和简单?

谢谢。

+0

可能是http://stackoverflow.com/questions/979975/how-to-get-the-value-from-the-url-parameter的副本 – deltree

+0

@deltree没有抱歉,它完全不同。看看他问的其他答案。不要只阅读其他答案而不做重复。我想你只是阅读tittle –

回答

-2

首先,每次获取var时,查看整个查询字符串似乎效率不高。我建议,分析整个查询字符串转换成一个对象了,就象这样:

function getParameters() { 
    // Get just the query string, and split it on & 
    var param_arr = window.location.search.substring(1).split('&'), 
     param_obj = {}; 

    // Iterate through results 
    for (var i = 0; i < param_arr.length; i++) { 
     var param = param_arr[i].split('='); 

     if (param === param_arr[i]) 
      // If this did not have a value, it goes into the object as key = true 
      param_obj[param] = true; 
     else 
      // If this did have a value, we enter it into the object as key = value 
      param_obj[param[0]] = param[1]; 
    } 

    return param_obj; 
}; 

现在,getParameters会返回一个对象,看起来像这样的例子:

{ 
    p: 1, 
    v: 1, 
    uk: 0 
} 

至于违约,简单的方法是用默认值创建一个看起来像这样的对象,然后将它们合并在一起。有很多可以做这件事有点更优雅和万无一失库,但这里有一个简单的例子:

function mergeParams(defaults, params) { 
    var obj = {}; 

    for (var i in defaults) { 
     if (i in params) 
      obj[i] = params[i]; 
     else 
      obj[i] = defaults[i]; 
    } 

    return obj; 
} 

所以,你会怎么做:

var defaults = { 
    i: 0, 
    v: 1 
}; 

var params = getParameters(); 
params = mergeParams(defaults, params); 

所有这一切仅仅是一个开始。还有其他可能的考虑因素,具体取决于您的需求,例如解析查询字符串编码。我强烈建议寻找一个可以为你做到这一点的图书馆。 URI.js可能很适合:http://medialize.github.io/URI.js/

+0

如何确定参数是否定义,如果没有定义,我做了replaceparameter? –

+0

由于这将默认值与URL中的参数合并,因此我们可以获取默认值,而不会更改URL。这意味着你不必反复击中'后退'。实际上,用户甚至没有看到URL中显示的默认参数。 – Chazzu

+0

我如何合并一个参数的例子?你能给例子 –