为什么代码使用:eq(“+ e +”)?

时间:2012-01-29 12:02:30

标签: jquery

$(function(){
    $(".nav ul li").each(function(e){
        $(this).mouseover(function(){
            $(".subnav .left div:not(:eq("+e+"))").hide();
            $(".subnav .left div").eq(e).show();
        })
    })
})

上面代码中的div:not(:eq("+e+"))")是什么意思?我不知道为什么它在括号中使用两个+?我可以使用div:not(:eq(e))")而不是它吗?谢谢。

2 个答案:

答案 0 :(得分:1)

在JavaScript中,+用于将两个内容组合在一起。

在这种情况下,它正在添加字符串。

此:

".subnav .left div:not(:eq("+e+"))"

意味着添加三个字符串成为一个:

  1. .subnav .left div:not(:eq(
  2. e
  3. ))
  4. 最终结果是添加到jQuery选择器的e的值,e是当前迭代元素的索引。

    整个事情的结果用简单的话来说就是:当鼠标悬停在特定列表项上时,隐藏<div>下的所有.subnav .left个元素,但{h}列表中的<div>除外项目

    修改:您可以通过使用此类代码来避免代码混乱并转储+

    $(".subnav .left div").not(function(index) {
        return (index === e);
    }).hide();
    

    更多行,但在显示函数内部的逻辑时也更优雅,而不是字符串。

答案 1 :(得分:0)

我不能真正站在凌乱的代码中,所以这里有一个替代方案(应该)做同样的事情:

$(function(){
  $('.nav ul li').mouseover(function(){
    $('.subnav .left div').eq($(this).index()).show().siblings().hide();
  });
});