jQuery元素选择器问题

时间:2009-03-14 15:39:06

标签: jquery fancybox selector

我的问题有点复杂。

我有以下代码:

$(document).ready(function() {

    var hash = window.location.hash.substr(1);
    var href = $('#nav li a').each(function(){
        var href = $(this).attr('href');
        if(hash==href.substr(0,href.length-5)){
            var toLoad = hash+'.html #content';
            $('#content').load(toLoad)
        }                                           
    });

    $('#nav li a').click(function(){

        var toLoad = $(this).attr('href')+' #content';
        $('#content').hide('fast',loadContent);
        $('#load').remove();
        $('#wrapper').append('<span id="load">LOADING...</span>');
        $('#load').fadeIn('normal');
        window.location.hash = $(this).attr('href').substr(0,$(this).attr('href').length-5);
        function loadContent() {
            $('#content').load(toLoad,'',showNewContent())
        }
        function showNewContent() {
            $('#content').show('normal',hideLoader());
        }
        function hideLoader() {
            $('#load').fadeOut('normal');
        }
        return false;

    });

});

好吧,首先不是我编码它的人,所以我真的不明白它的作用,我也试图改变它,但我没有成功。 代码将选择“nav li”链接并以AJAX方式显示页面,这意味着无需重新加载。 它正确地做到了:) 现在,我只想添加一个fancybox来注册用户。为此,我应该添加以下代码。

$("a#reg").fancybox({
    'hideOnContentClick': false
});

现在我只是把代码放在$ document.readyfunction中,而且花哨的盒子就像它应该的那样工作,而且nav li链接运行良好。 那么问题出在哪里? 当我点击'nav li'链接并加载内容然后再次点击主页链接时,(我返回到第一页),花式框不再有效。 我知道它非常敏感,所以你可能对它不太了解,所以让我以另一种方式解释它。 我有'nav li'的选择器和花式盒子链接的选择器,让它们一起工作的最佳方法是什么?

也可以有人向我解释代码的作用。
谢谢。

1 个答案:

答案 0 :(得分:2)

好的......以下是代码的作用:

    var hash = window.location.hash.substr(1);
    var href = $('#nav li a').each(function(){
        var href = $(this).attr('href');
        if(hash==href.substr(0,href.length-5)){
                var toLoad = hash+'.html #content';
                $('#content').load(toLoad)
        }                                                                                       
    });

第一部分将获取当前页面的hash,检查其中一个“nav li”链接是否以此哈希结束(预期为5个字符),如果是这种情况,则会加载{{1}当前页面的#content元素中的页面hash + ".html"的元素(我想它是div)。

想象一下,您加载了网址“http://.../page1.html#page2”。将加载Page1,然后在page1的#content中通过ajax调用加载page2.html的#content。

#content

这将向“nav li”链接添加以下行为:单击时,显示“加载消息”并在当前页面的#content元素中加载目标页面的#content。

我不知道为什么这个剧本,尽管很糟糕,会导致你的fancybox不显示。我的猜测是“nav li”链接将使用ajax调用加载内容,这不会影响已加载的fancybox,但是当您单击主页链接时,页面将完全重新加载,并且fancybox代码不会执行,有一个原因。您可以通过添加简单警报来检查:

    $('#nav li a').click(function(){

        var toLoad = $(this).attr('href')+' #content';
        $('#content').hide('fast',loadContent);
        $('#load').remove();
        $('#wrapper').append('<span id="load">LOADING...</span>');
        $('#load').fadeIn('normal');
        window.location.hash = $(this).attr('href').substr(0,$(this).attr('href').length-5);
        function loadContent() {
                $('#content').load(toLoad,'',showNewContent())
        }
        function showNewContent() {
                $('#content').show('normal',hideLoader());
        }
        function hideLoader() {
                $('#load').fadeOut('normal');
        }
        return false;

    });

如果单击主页链接时重新加载整页,并且没有弹出此警报,则表明您的问题是原因。