Как удалить второй хэш, добавленный пользователем?

#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! Да, вы можете просто добавить это, но косая черта — это специальный символ в регулярном выражении, поэтому его необходимо экранировать обратной косой чертой. Будет обновляться…