我有一张包含 9 种不同状态的图像,并将适当的背景位置规则设置为类以显示不同的状态。我不能使用 :hover 伪选择器,因为正在更改的背景图像与悬停在上面的元素不同。我以这种方式定义了类:
#chooser_nav {width:580px; height:38px; background:transparent url(/assets/images/chooser-tabs.jpg) 0 0 no-repeat; margin-left:34px;}
#chooser_nav.feat {background-position:0 0;}
#chooser_nav.inv {background-position:0 -114px;}
#chooser_nav.bts {background-position:0 -228px;}
#chooser_nav.featinv {background-position:0 -38px;}
#chooser_nav.featbts {background-position:0 -76px;}
#chooser_nav.invfeat {background-position:0 -152px;}
#chooser_nav.invbts {background-position:0 -190px;}
#chooser_nav.btsfeat {background-position:0 -266px;}
#chooser_nav.btsinv {background-position:0 -304px;}
然后,使用 jQuery,我有一系列基于先前单击事件的悬停规则(此处未声明的“cur”变量在其他地方正确声明):
$("#featured_races a").hover(function(){
cur == "feat" ? $("#chooser_nav").attr("class", cur) : $("#chooser_nav").attr("class", cur+"feat");
}, function(){
$("#chooser_nav").attr("class", cur);
});
$("#invitational_races a").hover(function(){
cur == "inv" ? $("#chooser_nav").attr("class", cur) : $("#chooser_nav").attr("class", cur+"inv");
}, function(){
$("#chooser_nav").attr("class", cur);
});
$("#behind_the_scenes a").hover(function(){
cur == "bts" ? $("#chooser_nav").attr("class", cur) : $("#chooser_nav").attr("class", cur+"bts");
}, function(){
$("#chooser_nav").attr("class", cur);
});
因此,在 Moz 和 WebKit 浏览器中,这可以正常工作。应用类并且背景图像相应地改变。也适用于 IE7。但是,在 IE6 中,背景图像永远不会改变。这些类得到了适当的应用,我用 MS 的 web 开发工具中的 DOM 查看器验证了这一点。所以,jQuery 正在工作。该课程正在应用,但没有明显发生任何变化。
我有点难住了……帮帮我,Crackoverflow……你是我唯一的希望……
编辑:就 className 与 setAttribute 而言......该类正在发生变化。attr("class", cur) 正在工作。但是,一旦更改了类,生成的规则就不会在视觉上应用……但是类的更改正在发生。
编辑 2: 至于 jQuery 的特定于类的方法:我最初将它们放在代码中,结果是一样的。同样,问题不在于没有将类应用于元素......这已被证实正在发生。这是一旦类在元素上,由于某种原因,元素不遵循为该类设置的 CSS 规则......