1

我确定有人问过它,但我找不到解决我的问题的方法。我有一个跨 3 个 div 命名相同的类。此类正在使用 css 隐藏。问题是当我将鼠标悬停在 1 个 div 上时,所有 3 个同时显示隐藏。我只想显示我悬停的元素。我想我应该使用 .each() 但我不确定它是如何组合在一起的。

CSS

.background-hover {
    display: none;

HTML:

    <div class="home-get-started">
   <-- first--><div class="home-get-started">
            <!-- image-->
            <img src="image.png">
              <!-- hover hidden state -->               
                <div class="background-hover">
                <div class="home-btn">Text</div>
                </div>
            </div>

<--second --> <div class="home-get-started">
            <!-- image-->
            <img src="image.png">
              <!-- hover hidden state -->               
                <div class="background-hover">
                <div class="home-btn">Text</div>
                </div>
            </div>
    </div>

jQuery:

$(".home-get-started").hover(
function () { $('.background-hover').css({"display":"block"}); },
function () { $('.background-hover').css({"display":"none"}); }
);
4

2 回答 2

4

您正在显示/隐藏所有带有 class 的元素background-hover。您可能想要的只是对触发事件的元素的后代执行此操作......

您可以使用find()DOM 查询某个元素的后代(this在我们的例子中)。

$(".home-get-started").hover(
    function () { $(this).find('.background-hover').show(); },
    function () { $(this).find('.background-hover').hide(); }
);

jsFiddle 演示

请注意,在某些情况下,两个文本会同时显示 - 这是因为您的包装 div 也有 home-get-started 类,因此悬停处理程序也会为该元素触发。

于 2013-05-09T23:09:35.317 回答
1

这个怎么样。你可以使用切换

演示

$(".home-get-started").hover(
    function () { $(this).find('.background-hover').toggle(); }

);

此外,您还有一个额外<div class="home-get-started">的目的。如果是这样,悬停在上面将触发所有这些。

如果是这样,那么最好的办法是使用直接子选择器>来避免同时打开两者。

$(".home-get-started").hover(
   function () {
       $('> .background-hover', this).toggle();
   }
);
于 2013-05-09T23:13:19.137 回答