Как сослаться на знак фунта стерлингов (#) в jQuery?

Я пробовал новый способ настройки веб-сайта с использованием jQuery для динамического получения содержимого при нажатии на ссылку. Вот код jQuery:

$(document).ready(function() {

 var content_loader = $('#content-loader');

 $('#nav ul li a').click(function () {
  $(this).closest('ul').find('li.active').removeClass('active');
  $(this).parent().addClass('active');
  content_loader.load('content/' + $(this).attr('data-name') + '.html'); 
  });

 content_loader.load('content/home.html');

});

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

Все это работает довольно хорошо, за исключением 2 проблем, которые у меня есть.

  1. Допустим, я нажимаю ссылку «Свяжитесь с нами». Теперь я увижу #contactus в конце URL-адреса. Если я затем обновлю страницу, я снова увижу содержимое своей домашней страницы.
  2. Та же проблема, если я попытаюсь связать кого-то со своей страницей контактов.

Мне было интересно, может ли jQuery каким-то образом узнать, что следует после знака # в URL-адресе. В этом случае я могу изменить последнюю строку моего кода jQuery, чтобы постоянно загружать ее вместо домашних данных.


person Justin    schedule 01.07.2010    source источник
comment
возможный дубликат: stackoverflow.com/questions/298503/   -  person Marek    schedule 01.07.2010
comment
вы добавляете недопустимый атрибут в свою разметку? .. не гуд .. ;)   -  person Reigel    schedule 01.07.2010
comment
Я согласен с Рейгелем. попробуйте вместо этого использовать .data(), если вы хотите сохранить некоторые произвольные данные в элементе   -  person ZX12R    schedule 01.07.2010
comment
Спасибо, я избавился от этих атрибутов данных, хотя знаю, что они являются частью HTML5: ejohn.org/blog/html-5-data-attributes   -  person Justin    schedule 01.07.2010


Ответы (2)


window.location.hash будет содержать значение после хеша (если он есть). (Это когда в текущем URL-адресе, например текущей странице, в адресной строке браузера есть решетка.)

В противном случае, если вы читаете ссылку из href, вам нужно будет использовать indexOf('#') и немного синтаксического анализа.

person David_001    schedule 01.07.2010

Спасибо за ваши ответы, ребята. Вот как я это сделал сейчас:

$(document).ready(function() {

    var content_loader = $('#content-loader');

    $('#nav ul li a').click(function () {
        $(this).closest('ul').find('li.active').removeClass('active');
        $(this).parent().addClass('active');
        content_loader.load('content/' + $(this).attr('href').slice(1) + '.html');  
        });

    var initial = 'home';
    if (window.location.hash) {
        initial = window.location.hash.slice(1);
        }

    $('#nav').find('a[href="#' + initial + '"]').parent('li').addClass('active');
    content_loader.load('content/' + initial + '.html');

    });
person Justin    schedule 01.07.2010