Jquery选择器有效性/范围

时间:2011-12-13 00:19:19

标签: javascript jquery jquery-selectors javascript-framework

JQuery的新手,但想用它来预取背景中的html页面(大约4个@约4kb)但我不太确定我这样做是对。

以下是我提出的代码:

$(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. 我需要更改什么才能将选择器的范围限制为<头> ......< / head>部分?

2 个答案:

答案 0 :(得分:0)

$(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'} 
            });
        });
});

答案 1 :(得分:0)

搞定了。问题是因为当我使用google api链接到JQuery时,jquery片段没有运行。当我直接从我的网站提供服务时,在这种情况下,所有的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"]')

限制选择器。

我还删除了浏览器检测,并将其用于所有浏览器。