【问题标题】:How to use parameters without values with jQuery BBQ plugin?如何通过 jQuery BBQ 插件使用没有值的参数?
【发布时间】:2013-02-13 17:13:55
【问题描述】:

我需要定义和读取哈希值,例如

#page1&filter=1-1-0 
#filter=1-1-0 (if page number is omitted)
#page1 (if filter is not defined)

即页码将是参数的一部分,并且没有值。 如何使用(获取和设置)这些参数?

【问题讨论】:

    标签: jquery jquery-bbq


    【解决方案1】:

    您可以使用window.location.hash 访问 URL 中哈希后的字符串内容。

    然后,您需要进行一些解析以获取您的键值对。类似于下面的代码:

    function getParameters(){
        params = {}
        var keyValuePairs = window.location.hash.substr(1).split('&');
        for (x in keyValuePairs){
            var split = keyValuePairs[x].split('=', 2);
            params[split[0]] = (split[1]) ? decodeURI(split[1]) : "";
        }
        return params;
    }
    
    function setParameters(key, value){
        var params = getParameters();
        params[key] = value;
        var hashString = ""
        for (x in params){
            if (params[x]){
                hashString += "&" + x + "=" + encodeURI(params[x]);
            } else {
                hashString += "&" + x;
            }
        }
        window.location.hash = hashString.substr(1);
    }
    

    您可以通过以下方式读取“过滤器”参数:

    var parameters = getParameters();
    console.log(parameters.filter);
    

    【讨论】:

    • 谢谢,赞美。有什么方法可以简化 jQuery BBQ 插件? ;) 另外,我不喜欢您的方法 - 如果未定义页面,则哈希看起来像 #&filter=1-1-326 - 理想情况下,不应该有 & 符号。可以修吗?
    【解决方案2】:

    这里是使用 BBQ 插件的解决方案 (demo):

    var hash = $.deparam.fragment();
    var page = 'page1';
    $.each(hash, function(i, val) {
        if (i.indexOf('page') != -1) page = i;
    });
    var filter = (hash.filter==undefined) ? '0-0-0' : hash.filter;
    
    // update hash
    $.bbq.pushState('#' + page + '&filter=' + filter);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-15
      • 2012-06-29
      相关资源
      最近更新 更多