【问题标题】:Most Optimal Way To Get Query Param in Javascript在 Javascript 中获取查询参数的最佳方式
【发布时间】:2015-10-07 13:22:33
【问题描述】:

我在这里只使用 Javascript,因为这是一个广告登陆器(登陆页面),并且客户端不希望 jQuery 减慢网页速度。我需要一些 Javascript,它是获取着陆器上的“tid”查询参数的最佳方式(最少的代码行)。例如,想象一下这个指向着陆器的广告链接:

http://example.com/lander1.php?tid=med01

您能否提供在 Javascript 中获取查询参数的最佳方式,并使其在 IE7 及更高版本(FF、Chrome、Safari、Opera 和 IE)中也能正常工作?这是我想出的,但也许你可以更严格地优化它?让这个更严格的原因是像素跟踪的 sn-p 尽可能小。我的意思是,我已经有额外的行(此处未显示)来创建回发参数数组,然后调用远程 Javascript 将这些额外参数传递给 PIWIK 跟踪系统。

try {
  var q = {};
  var ls1 = location.search.substr(1) + '&';
  var ls2 = ls1.split('&');
  for(var i1 in ls2) {
    var i2 = ls2[i1];
    q[i2.split('=')[0]] = i2.split('=')[1];
  }
} catch(e) {}

// 然后我可以使用 q.tid 来获取 URL 上的 'tid' 查询参数。

【问题讨论】:

标签: javascript regex parsing cross-browser query-parameters


【解决方案1】:

试试这个

 var getQueryParameterByName = function (name) {
        name = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");
        var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"),
            results = regex.exec(location.search);
        return results == null ? "" : decodeURIComponent(results[1].replace(/\+/g, " "));
    };

【讨论】:

    【解决方案2】:

    来自这里的另一篇文章: 您还可以使用 Rodney Rehm 的 URI.js 库。

    var qs = URI('www.mysite.com/default.aspx?dest=aboutus.aspx').query(true); 
    alert(qs.tid); 
    

    【讨论】:

    • 太多的 Javascript 行——我在页面加载速度方面没有任何收获
    • 通常速度取决于重复动作,而不是 1 次解析,但您可能比我更了解您需要的速度。无论如何,这是使您的参数具有可靠样式的简单且不慢的方法。如果你需要速度,只为你需要的参数做一个正则表达式 - tid ...没有比这更快的方法,如果你只需要 tid 和很多速度,你不需要解析所有参数!
    【解决方案3】:

    我认为这可行:

    var tid = '';try{tid=location.search.substr(1).split('=').join('#=').split(/=/).join('#').split('tid##')[1].split('&')[0];}catch(e){}
    

    如果我在 URL 的末尾加上 &test=1,这甚至可以工作,我什至可以通过将上面的 'tid' 与 'test' 交换来获得 'test' 查询参数。

    【讨论】:

    • 其实这个one更好更短,只要用try/catch包裹就行了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多