【问题标题】:JQuery hover on last element in hierarchyJQuery 悬停在层次结构中的最后一个元素上
【发布时间】:2012-04-05 03:52:22
【问题描述】:

我有以下html结构

<div>
    text 1
    <div>
        text 2
        <div>
            text 3
            <div>
                text 4
            </div>
        </div>
    </div>
</div>​

使用下面的 jquery

$('div').hover(
    function() {
        $(this).addClass("hover");
    },
    function() {
        $(this).removeClass("hover");
    }
);​

jsFiddle

当我将鼠标悬停到带有文本 4 的最后一个 div 时,上述所有 div 元素都会获得类悬停。

有没有一种聪明的方法可以只将悬停类放在最后一个悬停的 div 元素上?因此,当我将鼠标悬停到文本 3 时,只有周围的 div 会获得悬停类。

我不想将文本包装在新元素中,因为应用情况比这要复杂一些。我也不能使用 CSS3。

【问题讨论】:

  • 你能给最里面的 div 一个类名吗?
  • 你也要选择父母吗?还是只有实际悬停的元素?
  • 我真的很想用 stopPropagation() 来做到这一点,但似乎无法让它工作。
  • @idrumgood:这里也一样 :(
  • 不,层次结构是动态的,并且会随着 ajax 的使用而变化

标签: jquery css hover


【解决方案1】:

你可以的

$('div').hover(
    function() {
        $('div').removeClass("hover");
        $(this).addClass("hover");
    },
    function() {
        $(this).removeClass("hover");
    }
);​

【讨论】:

  • 我也在考虑这个问题,但是一旦你从“text 4”悬停到“text 3”,我希望围绕“text 3”的 div 让类悬停
【解决方案2】:

鼠标悬停时,将类添加到当前元素,然后使用.parents()从其所有祖先divs 中删除该类:

    function() {
        $(this).addClass("hover").parents('div').removeClass("hover");
    },

鼠标移出时,从当前元素中删除类,并使用 .parent() 将类添加到其父级 div,如果其父级为 1。这样,当鼠标当前div移动其父div时,它会收到悬停效果:

    function() {
        $(this).removeClass("hover").parent('div').addClass("hover");
    }

您在.parents().parent() 中使用的选择器必须与您在$() 中使用的选择器相同,以免影响错误的元素。

jsFiddle preview

【讨论】:

  • 太棒了,这就是我要找的。非常感谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-31
  • 1970-01-01
  • 1970-01-01
  • 2011-06-02
相关资源
最近更新 更多