0

我需要通过获取当前年份使其成为第一个导航元素来使用 jQuery 构建导航。然后构建其他列表项以显示随后的年份...我的问题是针对我希望能够执行的 jQuery 函数内的列表项的兄弟姐妹,以便我可以轻松地在多个页面上运行该函数...这里是我到目前为止所拥有的......如果它有助于请求它,我可以设置一个小提琴。

这是成功/工作的代码,但没有包含在 jQuery 函数中:

$currentYear = (new Date).getFullYear();
$navListEl = $("#yearNav li").length; // = 7
$lastYear=0;
for (var i=1;i<$navListEl+1;i++)
{  
    $("#yearNav li"+":nth-child("+i+")").append($currentYear-$lastYear);
    $lastYear++;
}

第一次尝试:

jQuery.fn.createNav = function(){
    $currentYear = (new Date).getFullYear();
    $navListEl = $(this).length; // = 7
    alert('hey');
    $lastYear=0;
    for (var i=1;i<$navListEl+1;i++)
    {  
        $(this+":nth-child("+i+")").append($currentYear-$lastYear);
        $lastYear++;
    }
}

$("#yearNav li").createNav();

第二次尝试:(这个有点工作,但在每个 li 项目上复制了 nmbers,而不是在每个项目上复制一次)

jQuery.fn.createNav = function(){
    $currentYear = (new Date).getFullYear();
    $navListEl = $(this).length; // = 7
    $lastYear = 0;
    for (var i=1;i<$navListEl+1;i++)
    {  
        $(this).append($currentYear-$lastYear);
        $lastYear++;
    }
}

$("#yearNav li").siblings().createNav();
4

2 回答 2

1

作为 Musa 答案的替代方案,如果您想避免为每个元素重新运行选择器,那么您可以使用以下两种方法中的任何一种对选定元素的列表进行一次迭代:

  1. 使用eq()for 循环中的方法按索引访问列表中的每个元素:

    jQuery.fn.createNav = function(){
        $currentYear = (new Date).getFullYear();
        $navListEl = $(this).length; // = 7
        $lastYear = 0;
    
        for (var i = 0; i < $navListEl; i++)
        {
            $(this).eq(i).append($currentYear - $lastYear);
            $lastYear++;
        }
    }
    
  2. 使用该each()方法依次迭代每个元素:

    jQuery.fn.createNav = function(){
        $currentYear = (new Date).getFullYear();
        $navListEl = $(this).length; // = 7
        $lastYear = 0;
    
        $(this).each(function(){
            $(this).append($currentYear - $lastYear);
            $lastYear++;
        });
    }
    
于 2013-01-09T05:52:51.173 回答
1

尝试

$(this.selector+":nth-child("+i+")").append($currentYear-$lastYear);
于 2013-01-09T05:31:54.090 回答