如何从JavaScript中获取当前URL的查询string?
我有这样的URL:
http://localhost/PMApp/temp.htm?ProjectID=462
我需要做的是获得后的细节?
标志(查询string) – 这是ProjectID=462
。 我怎样才能使用JavaScript?
我迄今所做的是这样的:
var url = window.location.toString(); url.match(?);
我不知道接下来要做什么。
看看有关window.location
的MDN文章 。
QueryString在window.location.search
可用。
也可以在传统浏览器中使用的解决scheme
MDN提供了一个示例(在上面引用的文章中不再提供)如何获取QueryString中可用的单个键的值。 像这样的东西:
function getQueryStringValue (key) { return decodeURIComponent(window.location.search.replace(new RegExp("^(?:.*[&\\?]" + encodeURIComponent(key).replace(/[\.\+\*]/g, "\\$&") + "(?:\\=([^&]*))?)?.*$", "i"), "$1")); } // Would write the value of the QueryString-variable called name to the console console.log(getQueryStringValue("name"));
在现代浏览器中
在现代浏览器中,您有URL接口的searchParams
属性,它返回一个URLSearchParams对象。 返回的对象有许多方便的方法,包括一个get方法。 所以上面的例子相当于:
let params = (new URL(document.location)).searchParams; let name = params.get("name");
URLSearchParams接口也可用于以查询string格式parsingstring,并将其转换为便利的URLSearchParams对象。
let paramsString = "name=foo&age=1337" let searchParams = new URLSearchParams(paramsString); searchParams.has("name") === true; // true searchParams.get("age") === "1337"; // true
请注意,浏览器支持在这个界面上仍然是有限的,所以如果你需要支持传统的浏览器,请坚持第一个例子。
使用window.location.search
获取一切后?
包括?
例:
var url = window.location.search; url = url.replace("?", ''); // remove the ? alert(url); //alerts ProjectID=462 is your case
这将添加一个全局函数来访问queryStringvariables作为映射。
// ------------------------------------------------------------------------------------- // Add function for 'window.location.query( [queryString] )' which returns an object // of querystring keys and their values. An optional string parameter can be used as // an alternative to 'window.location.search'. // ------------------------------------------------------------------------------------- // Add function for 'window.location.query.makeString( object, [addQuestionMark] )' // which returns a queryString from an object. An optional boolean parameter can be // used to toggle a leading question mark. // ------------------------------------------------------------------------------------- if (!window.location.query) { window.location.query = function (source) { var map = {}; source = source || this.search; if ("" != source) { var groups = source, i; if (groups.indexOf("?") == 0) { groups = groups.substr(1); } groups = groups.split("&"); for (i in groups) { source = groups[i].split("=", // For: xxx=, Prevents: [xxx, ""], Forces: [xxx] (groups[i].slice(-1) !== "=") + 1 ); // Key i = decodeURIComponent(source[0]); // Value source = source[1]; source = typeof source === "undefined" ? source : decodeURIComponent(source); // Save Duplicate Key if (i in map) { if (Object.prototype.toString.call(map[i]) !== "[object Array]") { map[i] = [map[i]]; } map[i].push(source); } // Save New Key else { map[i] = source; } } } return map; } window.location.query.makeString = function (source, addQuestionMark) { var str = "", i, ii, key; if (typeof source == "boolean") { addQuestionMark = source; source = undefined; } if (source == undefined) { str = window.location.search; } else { for (i in source) { key = "&" + encodeURIComponent(i); if (Object.prototype.toString.call(source[i]) !== "[object Array]") { str += key + addUndefindedValue(source[i]); } else { for (ii = 0; ii < source[i].length; ii++) { str += key + addUndefindedValue(source[i][ii]); } } } } return (addQuestionMark === false ? "" : "?") + str.substr(1); } function addUndefindedValue(source) { return typeof source === "undefined" ? "" : "=" + encodeURIComponent(source); } }
请享用。
你可以使用这个函数来分隔string?id =
function myfunction(myvar){ var urls = myvar; var myurls = urls.split("?id="); var mylasturls = myurls[1]; var mynexturls = mylasturls.split("&"); var url = mynexturls[0]; alert(url) } myfunction(window.top.location.href); myfunction("http://www.myname.com/index.html?id=dance&emp;cid=in_social_facebook-hhp-food-moonlight-influencer_s7_20160623");
这里是小提琴
您可以使用window.location
对象的search
属性来获取URL的查询部分。 请注意,它包含问号(?),以防万一您打算parsing它。
你应该看看URL API,它有助手方法来实现它作为URLSearchParams
: https : //developer.mozilla.org/en-US/docs/Web/API/URLSearchParams
目前所有的浏览器都不支持这个function,所以不要忘记填充它(使用https://qa.polyfill.io/提供的Polyfill)。;
var queryObj = {}; if(url.split("?").length>0){ var queryString = url.split("?")[1]; }
现在你在查询string中有查询部分
先取代将删除所有的空格,其次将replace所有的'&'部分,最后第三个replace将把“:”代替'='的标志。
queryObj = JSON.parse('{"' + queryString.replace(/"/g, '\\"').replace(/&/g, '","').replace(/=/g,'":"') + '"}')
所以说,你有一个像ABC = 123&efg = 456的查询。 现在在parsing之前,你的查询被转换成{“abc”:“123”,“efg”:“456”}。 现在,当你parsing这个,它会给你在json对象的查询。
window.location.href.slice(window.location.href.indexOf('?') + 1)