jquery .eq不适用于某些导航项目

时间:2013-02-14 15:43:39

标签: php javascript jquery ajax wordpress

我正在WP中开发一个页面,我在页面上有一组帖子,这些是在幻灯片中添加的,在其下面有一个隐藏的div,其中隐藏了帖子库图像,这些画廊被分成了帖子并且像post slidshow一样生成,除了这些容器是实际的帖子内容。

当您单击幻灯片项目时,它会切换隐藏容器中该相关项目的可见性,并将其显示在滑块上方,然后您可以将其关闭以清除div。目前我将这个按钮作为测试工作,如下所示。

通过wordpress查询帖子生成以下标记:

链接到帖子的按钮由javascript循环创建,计算帖子数量:

<button class="toggles">work-1</button>
<button class="toggles">work-2</button>
<button class="toggles">work-3</button>

然后在它下面有一个名为.project的隐藏容器,当你点击一个项目时它就会显示出来:

这是标记:

<article class="post royalSlider rsMinW"id="work-2 Exposure">
  <img src="http://2mz:8888/wp-content/uploads/2013/02/interactive_table2.jpg"alt="" />
    <div class="rsContent">
      <span class="rsABlock txtLeft col1" data-move-effect="none">interactive_table</span>
      <span class="rsABlock txtLeft col2" data-move-effect="none">
      </span>
    </div>
   <img src="http://2mz:8888/wp-content/uploads/2013/02/table_build_03.jpg"alt="" />
   <div class="rsContent">
      <span class="rsABlock txtLeft col1" data-move-effect="none">table_build_03</span>
      <span class="rsABlock txtLeft col2" data-move-effect="none">
      </span>
   </div>
   <img src="http://2mz:8888/wp-content/uploads/2013/02/table_build01.jpg"alt="" />
   <div class="rsContent">
      <span class="rsABlock txtLeft col1" data-move-effect="none">table_build01</span>
      <span class="rsABlock txtLeft col2" data-move-effect="none"></span>
   </div>
   <img src="http://2mz:8888/wp-content/uploads/2013/02/table_build02.jpg"alt="" />
   <div class="rsContent">
      <span class="rsABlock txtLeft col1" data-move-effect="none">table_build02</span>
      <span class="rsABlock txtLeft col2" data-move-effect="none"></span>
   </div>
   <img src="http://2mz:8888/wp-content/uploads/2013/02/table_detail.jpg"alt="" />
   <div class="rsContent">
      <span class="rsABlock txtLeft col1" data-move-effect="none">table_detail</span>
      <span class="rsABlock txtLeft col2" data-move-effect="none">
      </span>
   </div>
</article>

我遇到的问题是我有一些javascript基本上将顶部按钮与#work-的前缀链接到具有相同id =“#work-1,2,3的实际隐藏项目的ID。 ..etc“喜欢这样:

var projects = $('.project section article[id^="work-"]');
var num = projects.length;
//var nav = $('.projects section article')

console.log(num);

for (i=1; i<=num; i++) {

    $('<button class="toggles" />').text('work-'+i).appendTo('#site-logo');
}

$('.toggles').live('click',
    function(){
    var thisIs = $(this).index();
    $('.projects > .project section article[id^="work-"]').eq(thisIs).toggle();
    $('.project').fadeIn(1000, 'easeInOutQuart');
});

它可以工作,但它总是省略最后一个项目,所以我可以让它们中的两个工作但是然后其中一个链接到按钮的项目根本不起作用。

有没有人知道为什么它不起作用或更好的方法呢?

谢谢, 标记

1 个答案:

答案 0 :(得分:0)

在您的实时点击功能中,thisIs为零索引,因此它实际上与您点击的名称不匹配。你的项目部分没有整个标记,所以我不知道这是不是问题,但你说

  

将带有#work-前缀的顶部按钮链接到具有相同id =“#work-1,2,3 ... etc”的实际隐藏项目的ID

这意味着它应该匹配:work-1按钮应该显示work-1项目,而不是work-0。

所以你可以在索引中添加1:

var thisIs = $(this).index() + 1;

或者,您可以在创建元素时附加点击处理程序。

for (i=1; i<=num; i++) {
  $('<button class="toggles"/>')
    .text('work-'+i)
    .attr('button-index', i)
    .appendTo('#site-logo')
    .bind('click', function() {
        var buttonIndex = $(this).attr('button-index');
        // prove the index is correct
        console.log(buttonIndex );

        // rest of the click handler code=
        $('.projects > .project section article[id^="work-"]').eq(buttonIndex ).toggle();
        $('.project').fadeIn(1000, 'easeInOutQuart');
    });
}

这会将您的按钮标记呈现如下:

<button class="toggles" button-index="1">work-1</button>
<button class="toggles" button-index="2">work-2</button>
<button class="toggles" button-index="3">work-3</button>

我个人喜欢将我需要的数据设置为与它们相关的dom元素的属性,这样可以更容易地看到正在发生的事情。在jQuery中从属性中提取数据不太可能发生变化,而如果你移动到调用它的位置或调整查询,你很可能会使用.index()函数射击自己。

最后,请注意.livedeprecated in jQuery 1.7并在1.9中删除,因此您可能希望升级并主动更改其中任何其他处理程序,并将其用于.on