我是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';
}
}
});
答案 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
}
如果有人知道如何正确格式化这些帖子,请随时对其进行编辑,谢谢!