2012-02-15 3 views
1

Я пытаюсь найти строку после моего хэш-знака, поэтому, когда пользователь перезагружает страницу, я могу просто посмотреть на эту строку, а затем динамически загрузить правильную страницу. Мой url выглядит так: http://mysite.com/#!/account/. Как получить только учетную запись /? Я попытался с помощью этого:JavaScript retrieve string после hash

var oldLoc = window.location, 
patt = /#!(.+)/, 
newLoc = oldLoc.match(patt)[1]; // This returns `/account/settings` 

if (newLoc == '' || newLoc == '#!/' || newLoc == '/#!' || newLoc == '/#!/') { 
    $('#reload_section').load('main.php'); 
} else if (newLoc == '/newsfeed/') { 
    $('#reload_section').load('newsfeed.php'); 
} else if (newLoc == '/account/') { 
    $('#reload_section').load('account.php'); 
} else if (newLoc == '/search/') { 
    $('#reload_section').load('ajaxsearch.php'); 
} 

Это прекрасно работает, если я ставлю значение как http://mysite.com/#!/account/ внутри переменной oldLoc, но если я ставлю то, что у меня есть это дает мне эту ошибку:

TypeError: 'undefined' is not a function (evaluating 'oldLoc.match(patt)') 

1) Почему это не работает, я пробовал все разные комбинации window.location, document.location, ничего не работает.
2) Есть ли более простой способ найти хеш страницы, а затем загрузить правильную страницу, как показано выше?

Спасибо!

+0

Я откатить ваши изменения; решения должны быть опубликованы как ответы на вопрос, а не как часть вопроса. – yoozer8

ответ

4

Использование window.location.hash. Для URL http://mysite.com/#!/account/ он вернет #!/account/. Теперь, просто взять #! от фронта с регулярным выражением:

window.location.hash.replace(/^#\!/,"") 

Приведенный выше код даст вам /account/.

EDIT: Вы также можете использовать это:

window.location.hash.substring(2) 
+0

Большое вам спасибо, window.location.hash.replace (/^# \! /, "") Отлично работает! –

+0

Добро пожаловать. Ловушка с использованием 'substring (2)' заключалась в том, что первые два символа будут удалены независимо от того, кем они были. – wecsam

3

вы можете использовать

window.location.hash 
+0

дал бы: #!/Account/..... – Kevin

+0

Это дало бы вам последнее. – Purag

+0

Хорошо, есть ли способ удалить #! и просто закончите с '/ account', если это не так. –

1

Объект window.location имеет хэш-свойство, которое содержит все после того, как (и в том числе) есть символ. Для того, чтобы получить все, после #, снять главный символ хэш:

window.location.hash.substring(1) 
+0

Это даст мне '/ account /'? –

+0

Нет, это дало бы!/Account/Если вы хотите удалить восклицательный знак, измените значение 1 на 2. Это удалит последующий символ. – kevinAlbs

1

рассмотреть также взглянуть на некоторые библиотеки маршрутизации JavaScript, как,

  • Crossroads.js (только маршрутизации)
  • Backbone.js (обеспечивает общая клиентская структура приложения, которая включает в себя полезный маршрутизатор с поддержкой pushState)
1

Вы можете попытаться взглянуть на Crossroads и Hasher библиотеки. Вы можете собрать их вместе, чтобы сделать то, что я думаю, что вы пытаетесь сделать.

// setup your routes 
crossroads.addRoute('newsfeed.php', function() { 
    // do some stuff 
}); 

//setup hasher 
hasher.initialized.add(crossroads.parse, crossroads); //parse initial hash 
hasher.changed.add(crossroads.parse, crossroads); //parse hash changes 
hasher.init(); //start listening for history change