Jquery селектор валидность / область действия - PullRequest
1 голос
/ 13 декабря 2011

Впервые в JQuery, но хочу использовать его для предварительной выборки html-страниц в фоновом режиме (около четырех @ около 4 КБ каждая), но я не совсем уверен, что делаю это правильно.

Вот код, который я придумал:

$(document).ready(function() {
    var my_url;
    $('[rel=prefetch][href$=.html]')
        .each(function() {
            my_url = $(this).attr('href')
            $.ajax({
                url: my_url, 
                dataType: 'text',
                headers:{'X-Moz': 'prefetch'} 
            });
        });
});

По сути, у меня есть несколько ссылок с «rel = prefetch» ​​в заголовке документа, и приведенный выше фрагмент кода вставляется, когда браузер не Firefox. Мое приложение отображает вещи по-другому, когда обнаружен заголовок «X-Moz: prefetch», поэтому он отправляется сюда по мере необходимости.

Предполагается, что код просто получает html и кеш без обработки скриптов, о которых, как мне кажется, должен заботиться dataType: text.

Буду признателен за некоторые глаза на это и предложения. Запросы:

  1. Действителен ли приведенный выше код? Если нет, что это за исправление?
  2. Что мне нужно изменить, чтобы ограничить область действия селектора разделом ... ?

Ответы [ 2 ]

0 голосов
/ 13 декабря 2011

Получил это работает. Проблема заключалась в том, что фрагмент jquery не работал, когда я связался с JQuery с помощью API Google. Когда я обслуживаю его непосредственно со своего сайта, и в этом случае все js объединяются в один файл, он работает.

Я заметил это, когда использовал инструмент разработчика в Safari.

Полный код:

(function ($) {
    $(document).ready(function() {
            var this_browser, my_url;
            // Prefetch pages for non Firefox browsers
            this_browser = new Browser();

            if ( this_browser.getBrowserName() != this_browser.BROWSER_FIREFOX ) {
                // Asynchronously prefetch html as text strings
                // I.E., do not process scripts in incoming html
                // See: http://ernstdehaan.blogspot.com/2009/08/prefetching-files-using-jquery.html
                $('link[rel="prefetch"][href$=".html"]')
                    .each(function() {
                        my_url = $(this).attr('href');
                        $.ajax({
                            url: my_url, 
                            dataType: 'text',
                            headers: {'X-Moz': 'prefetch'} 
                        });
                    });
            }
    });
}(jQuery));

Safari предупредил меня, что бит "(jQuery)" генерирует ошибку.

Оказалось, что это потому, что код был запущен до загрузки JQuery.

Также забыл упомянуть, что

$('head link[rel="prefetch"][href$=".html"]')

Ограничивает селектор.

Я также удалил обнаружение браузера и просто использую его для всех браузеров.

0 голосов
/ 13 декабря 2011
$(document).ready(function() {
    $('[rel=prefetch][href$=.html]')
        .each(function() {
            var my_url = $(this).attr('href')
            $.ajax({
                url: my_url, 
                dataType: 'text',
                headers:{'X-Moz': 'prefetch'} 
            });
        });
});

...