Удаление элементов из заголовка и URL страницы с помощью jQuery

#javascript #jquery #html

#javascript #jquery #HTML

Вопрос:

У меня есть скрипт мгновенного поиска в стиле Google, написанный на jQuery, который извлекает результаты из PHP-скрипта. Когда пользователь запрашивает что-либо, его запрос отображается в заголовке страницы как «ЗАПРОС — Мой сценарий поиска», а в URL страницы как #ЗАПРОС. Однако, когда вы удаляете весь текст из окна поиска, # все еще остается в URL, а заголовок гласит » — Мой сценарий поиска». Как я могу сделать так, чтобы после удаления всего содержимого окна поиска скрипт удалял заголовок и #?

Мой код jQuery:

 $(document).ready(function(){
    $("#search").keyup(function(){
        var search=$(this).val();
        var query=encodeURIComponent(search);
        var yt_url='search.php?q=' query 'amp;category=web';
        window.location.hash=query;
        document.title=$(this).val() " - My Search Script";

        $.ajax({
            type:"GET",
            url:yt_url,
            dataType:"html",
            success:function(response){
                $("#result").html(response);
            }
        });
    });
});
  

Ответ №1:

Вы можете привести <title> в порядок достаточно просто, но вы не сможете последовательно удалять # из URL после того, как вы установили хэш. Единственный браузер, который, кажется, избавляется от этого, — Firefox.

 $(document).ready(function(){
  $("#search").keyup(function(){
    var search=$(this).val();
    var query=encodeURIComponent(search);
    var yt_url='search.php?q=' query 'amp;category=web';
    window.location.hash=query;
    // You may want to use a better title than 'xa0' (blank)
    document.title = search=='' ? 'xa0' : search " - My Search Script";

    $.ajax({
      type:"GET",
      url:yt_url,
      dataType:"html",
      success:function(response){
        $("#result").html(response);
      }
    });
  });
});
  

Комментарии:

1. Возможно, было бы лучше не беспокоиться о запросе ajax, если пользователь не ввел поисковый запрос, как в моем ответе.

2. @Eric: Я знаю, к чему вы клоните, но, возможно, search.php скрипт либо не вернет результатов (очень похоже на то, как работает Google Instant, когда поле поиска пустое), либо будет возвращено сообщение с предложением ввести поисковый запрос.

Ответ №2:

Как насчет чего-то подобного:

 $(document).ready(function(){
    $("#search").keyup(function(){
        var search=$(this).val();
        var query=encodeURIComponent(search);
        var yt_url='search.php?q=' query 'amp;category=web';

        $.ajax({
            type:"GET",
            url:yt_url,
            dataType:"html",
            success:function(response){
                $("#result").html(response);
                if (query == "") {
                    window.location.hash=query;
                    document.title=$(this).val() " - My Search Script";
                } else {
                    window.location.hash=query;
                    document.title="My Search Script";
                }
            }
        });
    });
});
  

Изменения, которые я внес, следующие:

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

Комментарии:

1. -1 Это не сработает! Что вы ожидаете "My Search Script"; делать!?

2. Я бы не ожидал, что это что-нибудь сделает! Похоже, я удалил слишком много при попытке отредактировать текст в текстовом поле на сайте. Отредактировано в соответствии с тем, что я намеревался опубликовать, спасибо за дружескую заметку, сообщающую мне о моей ошибке…

3. Не беспокойтесь, я удалил понижающий голос теперь, когда вы это исправили

Ответ №3:

Попробуйте это:

 $(document).ready(function() {
    $('#search').keyup(function() {
        var search = $(this).val();
        if(search == '') {
            window.location.hash = '';
            document.title = 'My Search Script';
            $('#result').empty();
        }
        else {
            window.location.hash = encodeURIComponent(search);
            document.title = search   ' - My Search Script';

            $.ajax({
                type: 'GET',
                url: 'search.php',
                data: {q: search, category: 'web'},
                dataType: 'html',
                success: function(response){
                    $('#result').html(response);
                }
            });
        }
    });
});
  

Я использовал data опцию $.ajax , чтобы вам не нужно было создавать URL самостоятельно.

Я не думаю, что вы можете гарантировать избавление от хэша в URL: некоторые браузеры удаляют его, другие — нет.

Комментарии:

1. Я вижу пару проблем с этим подходом. 1) Изменение хэша при каждом событии ввода добавит большое количество записей в список истории браузера и сделает кнопку «Назад» бесполезной для пользователя. И 2) Когда поиск пуст, я бы ожидал, что содержимое ‘#result’ будет отражать это, а не отображать предыдущие результаты поиска.

2. @vitch: Я не подумал о пункте 1, поскольку OP запросил его при вводе. Хотя это хороший момент. Хорошо замечено во втором пункте, хотя!