如何使用多个哈希?

3

目前我使用Ben's Alman的jquery-hashchange插件在哈希中使用页面编号:

$(document).ready(function(){
    $(window).hashchange( function(){
      var hash = (location.hash) ? location.hash.slice(1) : 'page1';
      $.ajax({
          url: '/list/' + hash, // result url like page1, page2 etc.

现在我需要添加一个值 - filter。 我认为结果哈希URL可能会像这样:
#page1&filter=1-1-0 
#filter=1-1-0 (if page number is omitted)
#page1 (if filter is not defined)

如何解析这个问题?也就是说,如何了解是否定义了page,是否定义了filter(以及值是什么- 110 - 我需要它们分开)?
我考虑过Ben's Alman的BBQ插件,但是(1)它对于如此简单的任务来说看起来太复杂了,(2)不确定如何在没有值的情况下使用参数(page1, page2等)。
1个回答

5
非常简单且不可扩展的解析器,用于两个硬编码变量:
var hash_parts = location.hash.split('&', 2); //2 - limit, may be changed if more than two arguments

for(i in hash_parts) {
    if(hash_parts[i].indexOf("page") === 0) { //begins with "page"
        var current_page_number = hash_parts[i].substr(4);
    }
    else if(hash_parts[i].indexOf("filter") === 0) { //begins with "filter"
        var filter = hash_parts[i].split('=', 2);
        var filer_values = filter[1].split('-'); //filter_values == {'1', '1', '0'}
    }
}

您可以轻松地将其变得通用。 请参阅此处:在JavaScript中解析查询字符串 - 只需将window.location.search.substring(1)更改为散列。

谢谢!我需要解决的另一个任务是如何使用JavaScript定义这样的哈希表(即,我需要确定参数是否已添加,如果是,则需要修改其值;否则-添加参数)。 - LA_
操作哈希很容易,document.location.hash = "somehash";。所以,你可以这样做:if(document.location.hash.length > 0) { ... 做一些事情... } - Oroboros102
实际上这并不容易,因为您需要确定某些参数是否已经存在,如果是,则只需更新其值,否则 - 添加它。我已经使用了Ben的Alman BBQ插件来完成相同的操作。 - LA_

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接