如果我有一个URL,如
http://localhost/search.php?year=2008
我如何编写JavaScript函数来获取变量年份并查看它是否包含任何内容?
我知道它可以完成,location.search
但我无法弄清楚它如何抓取参数.
我最喜欢获取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"]);
你可以使用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');
非正则表达式方法,您可以简单地用字符"&"拆分并遍历键/值对:
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