Как получить поисковый запрос из хеша в URL - PullRequest
1 голос
/ 03 декабря 2011

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

screenshot w/ description

Вот как я поместил это в URL:

function trimspace(str) {
    str = str.replace(/ +(?= )/g, '');
    return str;
}
function searchMail() {
    var query = trimspace($('#search_input').val());
    if (query == '' || !query || query == null) {
        $('#search_input').focus();
    }
    else {
        window.location.hash = '#!/search/' + query;
        $('#loader').show();
        $.get('tools.php?type=search', { q: query }, function(data, textStatus) {
            $('#loader').hide();
            if (textStatus == 'success') {
                hideAllTabs();
                $('#search_results').html(data).show();
                document.title = "Search results - WeeBuild Mail";
            }
            else {
                alertBox('Search failed. Please try again in a few minutes.', 2500);
            }
        });
    }
}

И, кроме простого получения запроса, мне нужно уметь определять, равен ли хэш #!/search/query.

Заранее спасибо!

Ответы [ 3 ]

3 голосов
/ 03 декабря 2011

Определить, если запрос #!/search/query:

location.hash==='#!/search/query'

Узнать о частях запроса, предполагая, что запрос #!/search/query:

var parts = location.hash.split('/');

parts[0] - это #!. parts[1] равно search, а parts[2] равно test. Делать с нужными вам деталями теперь должно быть достаточно тривиально.

В ответ на комментарии:

function getPartAndRemainder(){
    var parts = location.hash.split('/');
    if(parts[0]!=='#!' || parts.length<2){
        // Value after # does not follow the expected pattern #!/part/any_parameters
        throw new Error('Cannot parse application part.');
    }
    return {
        // Contains the part of your application (word after first slash after #)
        part: parts[1],
        // Contains everything after second slash after # or the empty string
        remainder: location.hash.substring(
            // Length of #! (or whatever somebody might use instead)
            parts[0].length
            // Length of first slash
            +1
            // Length of your application part's name
            +parts[1].length
            // Length of the second slash
            +1)
    };
}

Функция возвращает объект, который содержит часть вашего приложения с ключом part, а ключ remainder будет содержать все остальное. Итак, если ваш URI будет something#!/search/test, функция вернет {part:'search', remainder:'test'}. Если URI не может быть проанализирован, вы получите сообщение об ошибке и вам следует вместо этого использовать разумное значение по умолчанию.

Вы будете использовать метод следующим образом при каждом изменении хеша или при каком-либо другом событии (моменте времени), когда вас интересует значение хеш-функции:

try {
    var hashValue = getPartAndRemainder();
    if(hashValue.part==='search'){
        var query = hashValue.remainder;
        alert('You searched: '+query)
    }
    if(hashValue.part==='inbox'){
        alert('You are in inbox, now');
    }
} catch(e){
    // It was not possible to parse the value after the # from URI according to our expected pattern.
    alert('No idea what to do with: '+location.hash);
}
1 голос
/ 03 декабря 2011

Это регулярное выражение будет соответствовать чему-либо после параметра поиска, это то, что вы ищете?

/#1/search/(.*)/
0 голосов
/ 03 декабря 2011
var match = /\/.*\/.*\/(.*)\//i.exec(location.hash)
//match contain the query
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...