当前位置:  开发笔记 > 编程语言 > 正文

如何从location.search获取特定参数?

如何解决《如何从location.search获取特定参数?》经验,为你挑选了8个好方法。

如果我有一个URL,如

http://localhost/search.php?year=2008

我如何编写JavaScript函数来获取变量年份并查看它是否包含任何内容?

我知道它可以完成,location.search但我无法弄清楚它如何抓取参数.



1> Alex..:

我最喜欢获取URL参数的方法是这种方法:

var parseQueryString = function() {

    var str = window.location.search;
    var objURL = {};

    str.replace(
        new RegExp( "([^?=&]+)(=([^&]*))?", "g" ),
        function( $0, $1, $2, $3 ){
            objURL[ $1 ] = $3;
        }
    );
    return objURL;
};

//Example how to use it: 
var params = parseQueryString();
alert(params["foo"]); 


那位老人总是说"当你遇到只能用正则表达式解决的问题时,你实际上有两个问题".

2> ilyaigpetrov..:

你可以使用window.URL课程:

new URL(location.href).searchParams.get('year')
// Returns 2008 for href = "http://localhost/search.php?year=2008".
// Or in two steps:
const params = new URL(location.href).searchParams;
const year = params.get('year');


window.URL是一个方便的,如果只使用最新的Chrome和Firefox

3> CMS..:

非正则表达式方法,您可以简单地用字符"&"拆分并遍历键/值对:

function getParameter(paramName) {
  var searchString = window.location.search.substring(1),
      i, val, params = searchString.split("&");

  for (i=0;i


@Luca Matteis:不,val不是全球性的.它被定义为var searchString中的局部变量,i,val,...

4> vinyll..:

这个问题很古老,JavaScript已经发生了变化.你现在可以这样做:

const params = {}
document.location.search.substr(1).split('&').forEach(pair => {
  [key, value] = pair.split('=')
  params[key] = value
})

而你得到的params.year包含2008.您还可以在params对象中获得其他查询参数.


编辑:更简洁/更简洁的方法:

const params = new Map(location.search.slice(1).split('&').map(kv => kv.split('=')))

然后,您可以测试该year参数是否存在:

params.has('year')  // true

或者检索它:

params.get('year')  // 2008



5> Justin Johns..:

以下使用正则表达式并仅搜索URL的查询字符串部分.

最重要的是,此方法支持普通和数组参数,如 http://localhost/?fiz=zip&foo[]=!!=&bar=7890#hashhashhash

function getQueryParam(param) {
    var result =  window.location.search.match(
        new RegExp("(\\?|&)" + param + "(\\[\\])?=([^&]*)")
    );

    return result ? result[3] : false;
}

console.log(getQueryParam("fiz"));
console.log(getQueryParam("foo"));
console.log(getQueryParam("bar"));
console.log(getQueryParam("zxcv"));

输出:

zip
!!=
7890
false



6> Luca Matteis..:
function gup( name ) {
    name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
    var regexS = "[\\?&]"+name+"=([^&#]*)";
    var regex = new RegExp( regexS );
    var results = regex.exec( window.location.href );
    if( results == null )
        return "";
    else
        return results[1];
}
var year = gup("year"); // returns "2008"


你应该使用`window.location.search`而不是`window.location.href`.这将简化您的表达式,而不必检查哈希或查询标记

7> Chris Dutrow..:

我花了一段时间才找到这个问题的答案.大多数人似乎都在建议使用正则表达式解决方案.我非常喜欢使用经过试验和测试的代码,而不是我或其他人在运行时想到的正则表达式.

我使用这里提供的parseUri库:http://stevenlevithan.com/demo/parseuri/js/

它可以让你完全按照你的要求去做:

var uri = 'http://localhost/search.php?year=2008';
var year = uri.queryKey['year'];
// year = '2008'


var year = parseUri(window.location.search).queryKey ['year']; 是一个更相关的例子.上面的那个不适用于parseUri脚本的1.2版.

8> 小智..:

最简单的方法就是拥有

if (document.location.search.indexOf('yourtext=') >= 0) {
    // your code
} else {
    // what happens?
}

指数()

indexOf(text)函数返回

当函数中传递的文本不在您要查找的任何变量或字符串中时,整数低于0 - 在这种情况下document.location.search.

当函数中传递的文本在您要查找的任何变量或字符串中时,整数等于0或更高 - 在这种情况下document.location.search.


我希望这很有用,@ gumbo

推荐阅读
保佑欣疼你的芯疼
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有