我是jQuery烧烤的新手,到目前为止,我已经弄清楚了大多数设置,但是我有一个小问题。这是设置。
一页,右侧有主要导航链接
每次导航链接单击都会将页面的正文内容更改为其相应的数据(显示和隐藏div)(带有bbq)
其中一个链接显示了一个div,其中包含另一组链接,当点击这些链接时,它们会在网址中设置哈希B
所以第一个链接点击
domain.com/dir/#A=page1
第二个链接点击
domain.com/dir/#A=page1&B=set1
如果我按下后退按钮,它将返回到上一个A哈希,但是B哈希仍保留在URL中。
当不在特定页面上时,有什么方法可以删除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';
}
}
});
最佳答案
使用jsbbq.pushState和merge_mode = 2,我已经完成了同样的事情,而不仅仅是在锚点上设置#。
在此处查看文档: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参数中的params将覆盖当前状态下的所有params。
1:当前状态下的任何参数都将覆盖params参数中的参数。
2:params参数将完全替换当前状态。
因此,如果您的链接如下所示:
您可以致电mysite.com#A = page1&B = page2
$ .bbq.pushState({'A':'pageXYZ'},2);
然后您的文档位置将是:
mysite.com#A = pageXYZ