Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
URL片段标识符-简化状态处理(javascript)_Javascript_Jquery_Url_Fragment Identifier - Fatal编程技术网

URL片段标识符-简化状态处理(javascript)

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

我有一个web应用程序,它广泛使用片段标识符来处理“状态”

若干问题:

1)将各种“location.hash name-value对”分配给变量以跟踪状态的好方法是什么?

1a)我应该创建一个跟踪js中状态的对象,还是为每个名称-值对声明全局变量

1b)有没有好的jquery插件来简化这个过程

1c)如果我想跟踪一个叫做“颜色”的东西,那么它是否应该一直附加到片段(#)中,以及检查它是否被定义的正确方法是什么;下面的代码可以改进吗

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];