URL片段标识符-简化状态处理(javascript)
我有一个web应用程序,它广泛使用片段标识符来处理“状态” 若干问题: 1)将各种“location.hash name-value对”分配给变量以跟踪状态的好方法是什么? 1a)我应该创建一个跟踪js中状态的对象,还是为每个名称-值对声明全局变量 1b)有没有好的jquery插件来简化这个过程 1c)如果我想跟踪一个叫做“颜色”的东西,那么它是否应该一直附加到片段(#)中,以及检查它是否被定义的正确方法是什么;下面的代码可以改进吗URL片段标识符-简化状态处理(javascript),javascript,jquery,url,fragment-identifier,Javascript,Jquery,Url,Fragment Identifier,我有一个web应用程序,它广泛使用片段标识符来处理“状态” 若干问题: 1)将各种“location.hash name-value对”分配给变量以跟踪状态的好方法是什么? 1a)我应该创建一个跟踪js中状态的对象,还是为每个名称-值对声明全局变量 1b)有没有好的jquery插件来简化这个过程 1c)如果我想跟踪一个叫做“颜色”的东西,那么它是否应该一直附加到片段(#)中,以及检查它是否被定义的正确方法是什么;下面的代码可以改进吗 var color; var hashString = lo
var color;
var hashString = location.hash;
var nvPairs = hashString.split(";");
var nvPair = new Array();
for (i = 0; i < nvPairs.length; i++)
{
var keyValuePair = nvPairs[i].split("=");
nvPair[keyValuePair[0]] = keyValuePair[1];
}
if (nvPair['color']) color = nvPair['color'];
var颜色;
var hashString=location.hash;
var nvPairs=hashString.split(“;”);
var nvPair=新数组();
对于(i=0;i
1d)由于一些名称被使用了两次(在上面的示例中为“vid”),我如何轻松地将它们存储为单独的变量
2)我想特别注意4种不同的“散列”:
examplesite.com/(无哈希)examplesite.com/#example=5(包含“example”)
examplesite.com/#time=2003;vid=4;vid=7;已修改=5(包含“已修改”)
examplesite.com/#time=2003;vid=4;vid=7(不包含“修改”或“示例”) 当应用程序加载并检查上述条件时,如何编写一个从哈希中提取变量的控制结构?
3) 如何存储以前的状态,以及当按下后退按钮时如何触发状态更改?我相信Ben Alman的烧烤可以帮助您:我只使用包含数组的对象,而不是数组。代码将类似于:
var color;
var keyValuePair,
hashString = location.hash,
nvPairs = hashString.split(";"),
nvPair = {};
for (var i = 0; i < nvPairs.length; ++i){
keyValuePair = nvPairs[i].split("=");
if (keyValuePair[0] in nvPair)
nvPair[keyValuePair[0]].push(keyValuePair[1]);
else
nvPair[keyValuePair[0]] = [keyValuePair[1]];
}
if ('color' in nvPair) color = nvPair['color'][0];
var颜色;
var keyValuePair,
hashString=location.hash,
nvPairs=hashString.split(“;”),
nvPair={};
对于(var i=0;i
这有点晚了,但是jQuery 1.9在Ben的插件($.browser)上引起了问题
可在此处找到分叉的更正版本:还有一个插件可以帮助处理哈希更改:
更多信息请点击此处:
谢谢,我检查了这一个,但它似乎不适用于给定的示例哈希字符串…更新:如果“;”被替换为“&”,它会工作-一个很棒的插件!没问题。然后你可以结束这个问题。
var color;
var keyValuePair,
hashString = location.hash,
nvPairs = hashString.split(";"),
nvPair = {};
for (var i = 0; i < nvPairs.length; ++i){
keyValuePair = nvPairs[i].split("=");
if (keyValuePair[0] in nvPair)
nvPair[keyValuePair[0]].push(keyValuePair[1]);
else
nvPair[keyValuePair[0]] = [keyValuePair[1]];
}
if ('color' in nvPair) color = nvPair['color'][0];