добавить / удалить имя привязки из текущей ссылки без обновления - PullRequest
32 голосов
/ 08 мая 2011

Я хочу, чтобы при событии клика добавлялось / удалялось имя якоря "#on", добавляемое к текущему URL-адресу без перезагрузки страницы, или используйте href = '# on' из ссылок, потому что это заставляет мою страницу переходить

Например: http://www.example.com/page.html#on, чтобы я мог обнаружить пользователей, которые приходят с этого URL и вызовите функцию On ()

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;    
}); 

Ответы [ 2 ]

60 голосов
/ 08 мая 2011

Для этого вам не нужен jQuery, вы можете получить / установить имя привязки, используя location.hash.Если вы добавите его в функцию jQuery ready, вы можете выполнить какое-либо действие, если для него установлено определенное значение:

$(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 = '';
    }
});

Обратите внимание, что при удалении хэша конечный # может оставаться в адресной строке.,Если вы хотите реагировать на живые изменения якоря, вы можете привязать обратный вызов к событию hashchange:

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

Если вы хотите, чтобы при очистке якоря ваша страница не поднималась наверх, выможет связать событие hashchange, чтобы вернуться к предыдущей позиции прокрутки.Проверьте этот пример: 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);
});
16 голосов
/ 30 декабря 2012

если вы используете jquery, попробуйте этот код

$("a[href^=#]").on("click", function(e) {
    e.preventDefault();
    history.pushState({}, "", this.href);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...