我甚至对jQuery将hover属性放在元素上的愚蠢方式感到惊讶。看看这个示例CSS:
div.test
{
width: 20px;
height: 20px;
color: #000000;
background: #FFFFFF;
}
div.test:hover
{
color: #FFFFFF;
background: #CC0000;
}
如果我们想将其转换为jQuery,我们必须输入以下内容:
$('div.test').css({
'width' : '20px',
'height' : '20px',
'color' : '#000000',
'background' : '#FFFFFF'
});
$('div.test').hover(function() {
$(this).css({
'color' : '#FFFFFF',
'background' : '#CC0000'
});
}, function() {
$(this).css({
'color' : '#000000',
'background' : '#FFFFFF'
});
});
有没有更好的方法呢?写出明显的东西感觉很蠢。
提前谢谢。
答案 0 :(得分:15)
你接近这个错误的方式。你可以像这样定义一个CSS类
.highlighted
{
color: #FFFFFF;
background: #CC0000;
}
$('div.test').hover(function() {
$(this).addClass('highlighted');
}, function() {
$(this).removeClass('highlighted');
});
答案 1 :(得分:3)
你也可以编写以下简单插件来做你想做的事情(自动取消悬停):
$.fn.easyHover = function(cssProps){
return this.each(function(){
var $t = $(this);
var oldProps = {};
for(x in cssProps)
oldProps[x] = $t.css(x);
$t.hover(function(){
$(this).css(cssProps);
}, function(){
$(this).css(oldProps);
});
}
}
然后您可以像这样使用它:
$('#elem').easyHover({color:'#000', background:'#ccc'});
然而,Praveen的回答肯定是要走的路。
答案 2 :(得分:3)
你误以为jQuery试图取代CSS。
jQuery没有“添加悬停标记”,它只是为JavaScript的悬停事件提供处理程序(IIRC它实际上是mouseover
/ mouseout
的抽象)。如果你想用JS模拟CSS的hover伪选择器,jQuery通过为你提供一个易于使用的事件处理程序绑定来为你提供便利。
答案 3 :(得分:2)
我想另一种方法是:
// In you stylesheet, just define the default properties
div.test
{
width: 20px;
height: 20px;
}
然后,创建一个简单的对象包装器来保存您要使用的属性
var hoverHelper = (function () {
var styles = {
hoverStyle: {
'color' : '#FFFFFF',
'background' : '#CC0000'
},
defaultStyle: {
'color' : '#000000',
'background' : '#FFFFFF'
}
};
return {
init: function (selector) {
$(selector).hover(
function () {
$(this).css(styles.hoverStyle);
},
function () {
$(this).css(styles.defaultStyle);
}
);
}
};
}());
hoverHelper.init('.hoverElementClass'); // Apply the hover functions
// to all matching elements
这样,至少可以将样式定义保存在一个地方。