#javascript #jquery #hash
#javascript #jquery #хэш
Вопрос:
Я использую много хэшей в своем URL для отображения сообщений и прочего, но у меня проблема. Это нормально, когда вы нажимаете на диалог, чтобы прочитать его:
Но посмотрите, что происходит, когда пользователь присоединяет другой хэш к концу: (тема исчезает, потому что JavaScript запутывается)
(Щелкните изображения, чтобы просмотреть увеличенные версии)
Как я могу удалить этот второй хэш, если он есть? Я делал это в Gmail раньше, и он автоматически удалял их. Итак, как я могу это сделать в своей системе? Вот мой хэш-код:
if (window.location.hash) {
var messageID = window.location.hash.replace('#!/message/', '');
var msgSubject = $('#subject_' messageID).text();
//the below code checks if conversation exists
$.get('tools.php?type=id_checkamp;id=' messageID, function(data) {
if (data == 'true') {
setTimeout(function() {
readMessage(messageID, msgSubject);
}, 200);
}
else {
alertBox('The requested conversation does not exist.', 2500);
window.location = '#';
}
});
}
Заранее спасибо!
Ответ №1:
Вы можете попробовать
var matches = window.location.hash.match(/#!/message/(d )/);
if (matches) {
var messageId = matches[1];
// ...
}
После этого будет записан ряд только цифр #!/message/
. Если хэш содержит #!/message/123
, то matches
это будет массив
['#!/message/123', '123']
и так matches[1]
будет содержать идентификатор сообщения. Если в хэше есть что-либо до или после него, это будет проигнорировано. Если совпадений нет, matches
будут null
.
Комментарии:
1. Круто, спасибо.
matches[1]
Вернет идентификатор, который находится в хэше? И, удалит ли это дополнительный хэш или просто сохранит его? Извините, если вы подумали, что я имел в виду, что я предпочитаю, чтобы он ничего не делал. Я отредактирую свой вопрос, чтобы он имел больше смысла, если этого еще не произошло.2. Ах, круто, спасибо! Я ничего не знаю о регулярных выражениях … мне трудно их понять. Я пытался сделать это:
if(hash.match('message') {
но это не сработало, вероятно, потому, что в нем тоже нужны символы, а не просто слова, правильно?3. @Nathan
.match()
также будет работать только со строкой, но в большинстве этих случаев лучше использовать.indexOf()
. Круглые скобки в приведенном выше регулярном выражении содержат рядцифр
d
, поэтому вы можете использовать идентификатор.4. Подождите, я думаю, что
.match(/#!message/(d )/);
это не совсем правильно, потому что мои хэши есть,#!/message/55837
но в регулярном выражении нет этой косой черты прямо перед словом «сообщение». Как мне добавить это в? Похоже, что без этого ничего не получится…5. @Nathan Np! Да, вы можете просто добавить это, но косая черта — это специальный символ в регулярном выражении, поэтому его необходимо экранировать обратной косой чертой. Будет обновляться…