用JavaScriptparsingURL哈希/片段标识符

寻找一种方法来将密钥对从URL的散列/片段中parsing到带有JavaScript / JQuery的对象/关联数组中

退房: jQuery烧烤

jQuery BBQ旨在parsing来自url(查询string或片段)的东西,并进一步简化基于片段的历史logging。 这是Yarin在他把一个纯粹的js解决scheme之前寻找的jQuery插件。 具体来说, deparam.fragment()函数完成这项工作。 看一看!

(我正在使用的支持网站使用的是asynchronoussearch,因为烧烤使得将整个对象放入片段中变得微不足道,所以我使用它来“保留”我的search参数,这为我的用户提供了search的历史状态,允许他们为有用的search添加书签,最重要的是,当QA发现search缺陷时,他们可以直接链接到有问题的结果!

这是从这个查询string分析器修改的:

function getHashParams() { var hashParams = {}; var e, a = /\+/g, // Regex for replacing addition symbol with a space r = /([^&;=]+)=?([^&;]*)/g, d = function (s) { return decodeURIComponent(s.replace(a, " ")); }, q = window.location.hash.substring(1); while (e = r.exec(q)) hashParams[d(e[1])] = d(e[2]); return hashParams; } 

不需要JQuery /插件

更新:

我现在按照Hovis的回答推荐jQuery BBQ插件 。 它涵盖了所有的哈希分析问题。

用纯Javascript做这个:

 var hash = window.location.hash.substr(1); var result = hash.split('&').reduce(function (result, item) { var parts = item.split('='); result[parts[0]] = parts[1]; return result; }, {}); 

我正在使用jQuery URLparsing器库。

我对这个问题的回答应该做你正在寻找的东西:

 url_args_decode = function (url) { var args_enc, el, i, nameval, ret; ret = {}; // use the DOM to parse the URL via an 'a' element el = document.createElement("a"); el.href = url; // strip off initial ? on search and split args_enc = el.search.substring(1).split('&'); for (i = 0; i < args_enc.length; i++) { // convert + into space, split on =, and then decode args_enc[i].replace(/\+/g, ' '); nameval = args_enc[i].split('=', 2); ret[decodeURIComponent(nameval[0])]=decodeURIComponent(nameval[1]); } return ret; }; 

您也可以使用.hash属性,在此滚动的内容示例中演示了点击链接或定位 。

这jQuery的API 分析哈希标签: https : //jhash.codeplex.com/

 // get the "name" querystring value var n = jHash.val('name'); // get the "location" querystring value var l = jHash.val('location'); // set some querystring values jHash.val({ name: 'Chris', location: 'WI' }); 

我正在通过一堆解决这个问题的方法来解决这个问题,然后用一行代码把它们拼凑在一起:

 const hashObj = location.hash.replace('#', '').split('&').reduce((prev, item) => Object.assign({[item.split('=')[0]]: item.split('=')[1]}, prev), {}); 

这一行显然有很多事情要做。 对于clariry可以这样改写:

 const hashObj = location.hash.replace('#', '').split('&').reduce((prev, item) => { return Object.assign({[item.split('=')[0]]: item.split('=')[1]}, prev); }, {}); 

你可能想看看jsuri 。 这似乎对我很好。