jquery
  • url
  • append
  • anchor
  • 2011-05-08 14 views 28 likes 
    28

    Chcę, aby w przypadku zdarzenia kliknięcia dodano/usunięto nazwę kotwicy "#on", która ma zostać dodana do bieżącego adresu URL bez ponownego ładowania strony, lub użyj href = '# on "z linkami, ponieważ to sprawia, że ​​moja strona skakaćdołącz/usuń nazwę zakotwiczenia z bieżącego adresu URL bez odświeżania

    np http://www.example.com/page.html#on więc mogę uzyskać wykryć użytkowników, które pochodzą z tego adresu URL i wywołać oN() funkcji

    function On() 
    { 
        //append to current url the anchor "#on"     
    } 
    
    function Off() 
    { 
        //remove from the current url the anchor "#on"      
    } 
    
    $('.on').live('click', function() { 
        On(); 
        return false;  
    }); 
    
    
    $('.off').live('click', function() { 
        Off(); 
        return false;  
    }); 
    

    Odpowiedz

    51

    nie robić naprawdę potrzebujesz jQuery do tego, możesz uzyskać/ustawić nazwę zakotwiczenia za pomocą location.hash. Jeśli umieścisz go w funkcji gotowy jQuery, można wykonać pewne działania, jeśli jest ustawiona na określoną wartość:

    $(function(){ 
        // Remove the # from the hash, as different browsers may or may not include it 
        var hash = location.hash.replace('#',''); 
    
        if(hash != ''){ 
         // Show the hash if it's set 
         alert(hash); 
    
         // Clear the hash in the URL 
         location.hash = ''; 
        } 
    }); 
    

    Należy pamiętać, że podczas wyjmowania hash, tylna # może pozostać w pasku adresu. Jeśli chcesz odpowiedzieć żyć zmiany kotwicy można powiązać zwrotnego do wydarzenia hashchange:

    $(document).bind("hashchange", function(){ 
        // Anchor has changed. 
    }); 
    

    Jeśli chcesz, aby zapobiec strony skakanie do góry podczas usuwania kotwicę można powiązać hashchange zdarzenie, aby powrócić do poprzedniej pozycji przewijania. Sprawdź ten przykład: http://jsfiddle.net/yVf7V/

    var lastPos = 0; 
    
    $('#on').click(function(){ 
        location.hash = 'blah'; 
    }); 
    
    $('#off').click(function(){ 
        lastPos = $(window).scrollTop(); 
        location.hash = ''; 
    }); 
    
    $(window).bind('hashchange',function(event){ 
        var hash = location.hash.replace('#',''); 
        if(hash == '') $(window).scrollTop(lastPos); 
        alert(hash); 
    }); 
    
    +0

    dzięki koleś, to działa dobrze teraz, z wyjątkiem tej części, gdzie chcę ustawić location.hash do niczego, tak jak powiedziałeś, zachowuje # na końcu adresu URL i sprawia, że ​​moja strona przeskakuje na górę ... trochę denerwująca, ale mam nadzieję znaleźć obejście. jeszcze raz dziękuję;) – Adrian

    +3

    Dodałem rozwiązanie problemu skakania. – DarthJDG

    +0

    jesteś człowiekiem! dzięki;) – Adrian

    14

    jeśli używasz jQuery spróbuj tego kodu

    $("a[href^=#]").on("click", function(e) { 
        e.preventDefault(); 
        history.pushState({}, "", this.href); 
    }); 
    
    +0

    Świetna, prosta odpowiedź! Działa jak marzenie! – MatthewLee

    +1

    Bądź świadomy obsługi przeglądarki dla interfejsu API historii - http://caniuse.com/#search=pushstate (w zasadzie IE10 +) – pospi

     Powiązane problemy

    • Brak powiązanych problemów^_^