用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 。 这似乎对我很好。