鼠标悬停时添加类

时间:2015-01-30 02:36:50

标签: jquery html css

我有一个情况,我需要为我悬停的元素添加一些边框。我正在使用Jquery,我在这里搜索了类似的问题,但都有一个特定的选择器,如$(".myClass")$("#myId")。但我的是$("*")。我的代码正在运行,但问题是如果我在另一个元素中有一个元素,那么两个元素都有我添加的类。我只需要将类添加到我输入的元素中。

这是HTML,是一个基本的例子,因为ids元素可能会改变。

<div id="first">
    <div id="second">
        <h2>TESTING MOUSE OVER</h2>
    </div>
</div>

CSS

#first{
    background-color: red;

    padding:50px;
}
#second{
    background-color: blue;
    text-align: center;

}
.over{
    border: 2px dashed black;
}

和Jquery

$(document).ready(function(){
    $("body *").mouseover(function(){
        $(this).addClass("over");
    });
    $("body *").mouseleave(function(){
        $(this).removeClass("over");
    });
});

这是一个例子: http://jsfiddle.net/k4y00sa2/ 我希望我清楚自己。 谢谢

4 个答案:

答案 0 :(得分:2)

使用$("body *")附加事件处理程序会将处理程序附加到树中的每个元素,因此会失去一些性能,并且不适用于动态添加的元素。最好附加一次,仅委托给body元素。

$(document).on("mouseover", "*", function(ev) {
  $(ev.target).addClass("over");
  return false;
});
$(document).mouseout("*", function(ev) {
  $(ev.target).removeClass("over");
});
#first {
  background-color: #ffffce;
  padding: 50px;
}
#second {
  background-color: #eee;
  text-align: center;
  padding: 1em;
}
.over {
  border: 2px dashed black;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<div id="first">
  <div id="second">
    <h2>TESTING MOUSE OVER</h2>
  </div>
</div>

答案 1 :(得分:1)

你的意思是这样的? http://jsfiddle.net/k4y00sa2/3/

$("body *").mouseover(function(){
    var cur = $(this);
    $(".over").removeClass("over");
    cur.addClass("over");
    return false;
});

我在班级存在的地方删除课程。并且只将它放在子元素上,因为如果你将鼠标悬停在内部元素上,那就是遍历的顺序。

答案 2 :(得分:0)

所有节点都在处理事件。在处理完之后,你需要阻止它冒泡。 通过返回false,事件不会再传播,浏览器也不再处理它。

$("body *").mouseover(function(){
    $(this).addClass("over");
    return false;
});

check it

Returning false in events is a shortcut for

ev.preventDefault();
ev.stopPropagation();

答案 3 :(得分:0)

不确定您正在寻找什么。看起来您只需按类或类型等选择实际元素。但也许这样的事情会有所帮助。如果它的父级已经有它,它不会添加该类。基本上通过DOM跳过彼此的项目。

$(document).ready(function(){
    $("body *").mouseover(function(){
        if (!$(this).parent().hasClass("over")){
        $(this).addClass("over");
        }
    });
    $("body *").mouseleave(function(){
        $(this).removeClass("over");
    });
});