jquery bbq从url中删除哈希b

时间:2012-06-23 09:24:17

标签: javascript jquery jquery-ui jquery-bbq

我是jquery bbq的新手,到目前为止我已经找到了大部分设置,但我有一点问题。继续设置。

右侧有一个主导航链接的页面 每个导航链接点击将页面的正文内容更改为其相应的数据(显示和隐藏div)(与bbq) 其中一个链接显示了一个带有另一组链接的div,单击这些链接时会在URL中设置哈希值

所以首先点击链接 domain.com/dir/#A=page1

第二次链接点击 domain.com/dir/#A=page1&B=set1

如果按下后退按钮,它会回到之前的A哈希值,但是B哈希值仍保留在网址中。

有没有办法在不在特定页面上时删除B参数?

$(window).bind('hashchange', function(e) {
    var state = $.bbq.getState('p');
    var graphState = $.bbq.getState('n');

    var base_title = '{/literal}{$smarty.const.SITE_TITLE}{literal} | Dashboard | ';
    $('.profile-nav a').each(function() {
        if (!state) {
            $('.profile-nav a').each(function() {
                $('#' + this.id).removeClass('live active');
                document.title = base_title + 'Message Center';
            });
            $('#m').addClass('live active');
        } else if (state == this.id) {
            $('#' + this.id).addClass('live active');
            document.title = base_title + $(this).text();
        } else {
            $('#' + this.id).removeClass('live active');
        }
    });

    if (!state) {
        $('.tab-content').fadeOut('fast');
        $('.message-content').fadeIn('slow');
    } else {
        $('.tab-content').fadeOut('fast');
        clicked = $('#' + state).attr('rel').split(' ')[0];
        $('.' + clicked).fadeIn('slow');
    }

    if (state == 'r') {
        if (graphState) {
            $('.nick-breakdown').fadeOut('fast');
            $('#' + graphState).fadeIn('slow');
            document.title = base_title + 'Reports | ' + $('#' + graphState).attr('rel');
        } else {
            $('.item-breakdown').fadeOut('fast');
            $('.nick-breakdown').fadeIn('slow');
            document.title = base_title + 'Reports';
        }
    }
});​

2 个答案:

答案 0 :(得分:5)

我使用带有merge_mode = 2的jsbbq.pushState完成了同样的事情,而不是仅仅在锚点上设置#。

点击此处的文档:http://benalman.com/code/projects/jquery-bbq/docs/files/jquery-ba-bbq-js.html#jQuery.bbq.pushState

  

merge_mode(Number):如果merge_mode不合并,则合并行为默认为0   指定(除非指定以#开头的哈希字符串,在   哪种情况合并行为默认为2),并且如下:

     
      
  • 0:params参数中的参数将覆盖当前状态中的任何参数。
  •   
  • 1:当前状态下的任何参数都将覆盖参数参数中的参数。
  •   
  • 2:params参数将完全取代当前状态。
  •   

所以,如果您的链接如下:

mysite.com#A = page1& B = page2你可以打电话

$ .bbq.pushState({'A':'pageXYZ'},2);

然后您的文档位置将是:

mysite.com#A = pageXYZ

答案 1 :(得分:0)

我有一个更简单的方法,不需要插件:

将当前的哈希参数复制到虚拟URL AS searchParameters。现在,您可以像搜索参数一样处理哈希参数,使用searchparameters的所有功能(developer.mozilla.org/en-US/docs/Web/API/URLSearchParams)对其进行编辑,然后将其复制为AS hasparameters

例如设置和更新参数的简单函数,您也可以使用“ .delete()”代替“ .set”来删除参数:

function setOrUpdateHashParameter( hashParameterName, hashParameterValue ) {
	let theURL				= new URL('https://dummy.com');				// create dummy url
	theURL.search			= window.location.hash.substring(1);		// copy current hash-parameters without the '#' AS search-parameters
	theURL.searchParams.set( hashParameterName, hashParameterValue );	// set or update value with the searchParams-API
	window.location.hash	= theURL.searchParams;						// Write back as hashparameters
}

如果有人知道如何正确格式化这些帖子,请随时对其进行编辑,谢谢!