簡體   English   中英

jQuery的燒烤從URL刪除哈希b

[英]jquery bbq remove hash b from url

我是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

我有一種更簡單的方法,不需要插件:

將當前的哈希參數復制到虛擬URL AS 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 } 

如果有人知道如何正確設置這些帖子的格式,請隨時對其進行編輯,謝謝!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM