Javascript查询字符串交换

时间:2018-05-17 16:07:45

标签: javascript

我有一个接受查询字符串作为参数的脚本。该脚本查找提供的字符串(有意写在页面上),并将其替换为url中提供的查询字符串。这完全适用于像“www.website.com/?city="foo”这样的网站的主页,但是当我尝试在内部页面上运行它时,脚本将不会执行交换,这意味着任何具有附加功能的URL深度,例如www.wbsite.com/page/?city=bar

我无法确定导致此功能的原因。

结果应该是这样的:

我定义了函数的内容,例如“我们做服务”(这是在某处写的)

我在网址中提供了查询参数:www.website.com/?city = city

该脚本查找此钩子并将其替换为我提供的字符串,如下所示:

“我们在”+ QS.city +“”

中提供服务

结果是:“我们在城市服务。”

(function(){var QS = function () {   
    var x = {};   
    var y = window.location.search.substring(1);
    var z = y.split("&");

    for (var i=0;i<z.length;i++) {
       var a = z[i].split("=");

       if (typeof x[a[0]] === "undefined") {
           x[a[0]] = decodeURIComponent(a[1]).replace(/\+/gi, ' ');
       } else if (typeof x[a[0]] === "string") {
           var b = [ x[a[0]],decodeURIComponent(a[1]).replace(/\+/gi, ' ')];x[a[0]] = b;
       } else {
           x[a[0]].push(decodeURIComponent(a[1]).replace(/\+/gi, ' '));
   }
} 
return x;
}();

if (QS.hasOwnProperty('city')) {    
    document.body.innerHTML = document.body.innerHTML.replace('We Build Powerful', 'We Build Powerful Websites in ' + QS.city + ' ');
    document.body.innerHTML = document.body.innerHTML.replace('Build a Stronger Brand', 'Build a Stronger Brand in ' + QS.city + '');
}
})();

1 个答案:

答案 0 :(得分:1)

您正在将代码拆分为&#39;&amp;&#39;这是第一个数组元素与您的整个网址。我建议的最干净,最直观的方法就是在你的第一个&#39;之后简单地取一个子串。

在你的情况下,只需在循环开始之前使用它:

  

var x = {}; var y = window.location.search.substring(1); y = y.substring(y.lastIndexOf('?') + 1); var z = y.split("&");