繁体   English   中英

jQuery选择器有效性/范围

[英]Jquery selector validity/scope

JQuery的新手,但想用它在后台预取html页面(每个页面大约四个@大约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> ... </ head>部分?
$(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'} 
            });
        });
});

得到它的工作。 问题是因为当我使用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"]')

限制选择器。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM