【问题标题】:jQuery hover multiple blocksjQuery悬停多个块
【发布时间】:2013-11-13 20:29:27
【问题描述】:

我正在使用 jQuery 悬停功能将鼠标悬停在 box-empty 类上。在悬停时,它将box-empty 替换为box-full

  1. 将鼠标悬停在一个块上时,如何也将鼠标悬停在所有先前的块上?
  2. 点击区块时,如何将box-full类添加到之前的所有区块中?

编辑: 抱歉,我忘了提到我还需要包含已单击/悬停的块(不仅是以前的块)。

这是我的代码:

HTML:

<div class="wrap"> 
    <span class="box box-empty"></span>
    <span class="box box-empty"></span>
    <span class="box box-empty"></span>
    <span class="box box-empty"></span>
</div>

jQuery:

$('.box-empty').hover(function () {
        $(this).addClass('box-full');
        $(this).removeClass('box-empty'); 
    }, function () {
        $(this).addClass('box-empty');
        $(this).removeClass('box-full');
    });

演示: http://jsfiddle.net/aCP9x/

【问题讨论】:

    标签: javascript jquery html css hover


    【解决方案1】:

    纯 CSS 方法:

    span:hover ~ span, span:hover {
        border: 1px solid #000;
        background: #000;
    }
    

    jsFiddle here

    正如下面 Fabrício Matté 所提到的,您可以利用 CSS 复选框 hack,让您可以有效地在选中/未选中之间切换。

    【讨论】:

    • OP 只想突出显示悬停在左侧的那些,我认为这不可能在 CSS 中。
    • @RoryMcCrossan 我能弄明白:jsfiddle.net/TfyaR .. 只是对 CSS 中的点击功能无能为力,所以没用。
    • @FabrícioMatté Awesome - 完全忘记了复选框黑客。你应该把它作为答案。
    • 不,这有点太老套了(HTML 混乱,不支持 IE=]
    【解决方案2】:
    $('.box').hover(
        function () {
            $('.box:lt(' + ($(this).index() + 1) + ')').toggleClass('box-full box-empty'); 
        }, 
        function () {
            $('.box:lt(' + ($(this).index() + 1) + ')').toggleClass('box-empty box-full');
    }
    );
    

    【讨论】:

      【解决方案3】:

      您需要使用prevAll()。您还需要addBack() 来包含当前悬停的元素。试试这个:

      $('.box-empty').hover(function () {
          $(this).prevAll().addBack().toggleClass('box-full box-empty');
      });
      

      Updated fiddle

      注意,我还使用toggleClass 简化了您的代码,这意味着相同的函数可以在hover 内的mouseentermouseleave 上运行。

      【讨论】:

      • 非常感谢您的回答以及改进我的代码。对不起,我忘了提,我还需要包含已单击/悬停的 div(不仅是以前的)。
      • @user1251698 这就是它应该做的。它不适合你吗?
      • @RoryMcCrossan 这就是它正在做的事情。我forked 制作了它,以便在鼠标离开时栏保持其状态。不是 OP 要求的,但可能是他想要的。
      • 谢谢,它有效。我刚刚将 addBack 替换为 andSelf.@DanRoss 也非常感谢,是的,这就是我想要的。 :)
      • @user1251698 很高兴你得到它的工作,虽然你应该注意 andSelf() 在 jQuery 1.8 中被弃用,而支持 addBack(): api.jquery.com/andself
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-20
      相关资源
      最近更新 更多