Могу ли я заставить браузеры WebKit показывать идентификатор фрагмента?

Я использую jQuery и идентификатор фрагмента для изменения состояния в зависимости от того, какую часть одностраничного сайта просматривает пользователь.

Я, наконец, заставил это работать, но поскольку и Safari, и Chrome не отображают идентификатор фрагмента, я не могу преобразовать его в переменную, и поэтому система ломается.

Есть ли способ заставить это действие специально для браузеров WebKit или другой способ получить доступ к фрагменту?

редактировать: добавлен код ниже

(function($){
$.fn.sectionMove = function() {

    return this.each(function() {          
    $(this).click(function() {
            if(window.location.hash){
                  var $hash = window.location.hash;
            } else if (!window.location.hash) {
                  var $hash = '#section1';
            }
            $n = $hash.substring($hash.length-1,$hash.length);

            $("div#headerNav ul li:nth-child(" + $n + ") a").removeClass('on');

            var $anchor = $(this);
            $('html, body').stop().animate({
                scrollTop: $($anchor.attr('href')).offset().top
            }, 1000,'easeInOutExpo', function(){
                var $hash = window.location.hash;
                $n = $hash.substring($hash.length-1,$hash.length);
                $("div#headerNav ul li:nth-child(" + $n + ") a").addClass('on');
            });
            event.preventDefault(); 
        });
     });

   };
})(jQuery);

person Ian    schedule 29.10.2010    source источник
comment
И какой jQuery вы используете; мы можем взглянуть на это?   -  person David says reinstate Monica    schedule 29.10.2010
comment
Извините, я добавил код выше.   -  person Ian    schedule 29.10.2010
comment
не беспокойтесь (просто это помогает нам помочь вам, если мы видим, с чем вы работаете), и если вы отвечаете кому-то в комментариях, добавляя префикс их отображаемого имени (в моем случае либо «Дэвид», либо «Дэвид Томас» ) с символом @ сообщает мне, что есть ответ. А также добро пожаловать в Stackoverflow! знак равно   -  person David says reinstate Monica    schedule 29.10.2010


Ответы (1)


Мне удалось решить это самостоятельно. Проблема была со следующими строками моего jquery:

$('html, body').stop().animate({
            scrollTop: $($anchor.attr('href')).offset().top

Хотя это позволяло осуществлять плавную прокрутку на странице, она переходила к привязке без обновления URL-адреса с помощью идентификатора фрагмента.

Если кто-то заинтересован в том, как сделать то же самое, приведенный ниже код должен помочь. Я модифицировал его для своих нужд, но заслуга принадлежит Ариалу Флеслеру (http://www.learningjquery.com/2007/10/improved-animated-scrolling-script-for-same-page-links).

function filterPath(a) {
        return a.replace(/^\//, '').replace(/(index|default).[a-zA-Z]{3,4}$/, '').replace(/\/$/, '')
    }

    var e = filterPath(location.pathname);
    var f = scrollableElement('html', 'body');
    $('a[href*=#]').each(function () {
        var b = filterPath(this.pathname) || e;
        if (e == b && (location.hostname == this.hostname || !this.hostname) && this.hash.replace(/#/, '')) {
            /*var anchor1 = window.location.hash; */
            var c = $(this.hash),
                target = this.hash;
            if (target) {
                var d = c.offset().top;
                $(this).click(function (a) {        

                    a.preventDefault();
                    $(f).animate({
                        scrollTop: d
                    }, 1000,'easeInOutExpo', function () {
                        location.hash = target
                        $("div#headerNav ul li a").removeClass('on');

                        $n = target.substring(target.length-1,target.length);
                        $("div#headerNav ul li:nth-child(" + $n + ") a").addClass('on');

                    })
                })
            }
        }
    });
person Ian    schedule 29.10.2010