window.location.hash продолжает добавлять имя, а не заменять его при нажатии на ссылки - PullRequest
0 голосов
/ 18 марта 2011

Хорошо, у меня есть этот скрипт, работающий на 99% от того, как он должен работать, но я не могу понять это немного.

Когда пользователь нажимает на ссылку, он берет значение href, обрезает его и дает мне последний сегмент URL. В этом примере я скажу его дом

так что мой скрипт затем берет домой и добавляет его к URL в адресной строке. таким образом, он выглядит как http://www.site.com/user/s2xi/home после того, как он сделал свое волшебство.

Но изначально у меня возникла проблема, когда из-за характера работы ссылок, я полагаю, он будет продолжать добавлять мой URL, например, http://www.site.com/user/s2xi#/home, которого на моем сервере нет

Так что я смог избавиться от # и все вернулось к норме ... о, нет, не все всегда работает идеально с первой попытки ...

поэтому я понял, что мой сценарий добавляет имена ссылок вместо их замены ... о нет, что теперь?

мои ссылки теперь будут выглядеть так: http://www.site.com/user/s2xi/home/someOtherLink

это добавит новое имя ссылки к старому имени ссылки вместо его замены ...

мой сценарий:

var newHash    = "",
        shref      = "",
        content    = '#content',
        $c         = $("#content"),
        $cw        = $("#content-wrapper");

    $(".menu-link, #my-account-link").live('click', function(){
        shref = $(this).attr("href").split("/");
        parent.location.hash = $(this).attr("href");
        window.location.hash = shref[5];
        console.log(window.location.hash);
        return false;
    });

    $(window).bind('hashchange', function(){
        if (location.href.indexOf("#") > -1) {
            location.assign(location.href.replace(/\/?#/, "/"));
        }
        newHash = window.location.hash;
        //newHash = window.location.hash.substring(1);
        //newHash = window.location.substring(1);
        //console.log(newHash);
        if(newHash)
        {
            $cw.find(content).fadeOut(200, function() {
                $cw.load(newHash + " #content-wrapper", function() {
                    $c.fadeIn();
                });
            });
        }
    });
    $(window).trigger('hashchange');

что может быть не так с логикой скрипта?

1 Ответ

0 голосов
/ 18 марта 2011

Во-первых, без /.../g, вы просто заменяете первое совпадение, что может быть тем, что вы хотите.

Ваша логика выглядит так:

  1. Замените # ссылкой, чтобы хеш теперь стал ссылкой
  2. Когда вы нажимаете на ссылку, обработчик берет последний сегмент в текущем атрибуте href и помещает его в хеш. Обратите внимание, что вы не удалили этот сегмент из URL .

Другими словами, скажем, это начинается с:

http://www.site.com/user/s2xi

Вы, скажем, набрали http://www.site.com/user/s2xi/home. Затем, щелкнув, вы получите shref [5] = "home". И вы добавляете его в хэш текущего URL , что делает его:

http://www.site.com/user/s2xi#home

И затем вы конвертируете этот хеш обратно в ссылку:

http://www.site.com/user/s2xi/home

Все хорошо. Второй раз, когда вы нажимаете на ссылку, скажем, http://www.site.com/user/s2xi/foo. При вашем нажатии shref [5] = "foo".

Затем вы добавляете его в свой хэш текущего URL:

http://www.site.com/user/s2xi/home#foo

Затем вы конвертируете этот хеш обратно в ссылку:

http://www.site.com/user/s2xi/home/foo

Вуаля. Вы добавили ссылку вместо ее замены. Вы должны заменить сегмент в URL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...