2012-09-14 40 views
2

我在UI的样式表中设置了一个类设置,在用户可以使用颜色选择器来设置页面样式的首选项部分。该值存储在数据库为十六进制,但是当我使用这些值来通过jQuery更新页面:使用jquery设置十六进制颜色

$nav.css("background-color", button_bg_color) 

我失去了NEW:悬停颜色。非悬停颜色正确变化,但我看到他们转换为RGB格式,并且我猜测这导致了悬停值的问题。 我想我可以改变我的代码,并悬停类的变化来解决这个问题,但是有没有办法让jQuery使用十六进制值设置颜色?还是有什么我失踪?

更新: 詹姆斯蒙塔涅是正确的,你不能改变:悬停效果,所以我改变它为一个类。现在,使用悬停()函数,我还是失去了一些东西: 小提琴:http://jsfiddle.net/Y9EBt/6/

+0

他们没有转化为RGB,您的浏览器检查员将它们显示为RGB,但RGB(r,g,b)和#rrggbb格式完全相同 – haynar

+5

您的意思是? http://jsfiddle.net/T3ZAg/在这种情况下,你的问题是由jQuery的'.css()'方法造成的,该方法将颜色设置为内联样式。这个内联样式将覆盖样式表中的':hover'声明。 –

+1

如果您需要保留悬停样式,只需在样式中添加'!important' – haynar

回答

2

这里有个问题,“Javascript不支持获取或设置伪选择器的属性,这意味着你不能直接获得:悬停CSS样式。” [source]

JQuery,但是有一个.hover() function这可能可以用来间接地更改悬停项目的CSS。例如:jQuery CSS Hover

编辑: 这里是一个小提琴,我展示它的工作: http://jsfiddle.net/TvfB9/1/

的关键点是:

  • 我在JavaScript中创建一个全局变量(外文档就绪功能): hover_color = "#00FFff";用于存储用户的“新”或“所需”悬停颜色。理想情况下,您可能希望将其初始化为页面加载时样式表中的任何内容。

  • 然后在改变颜色函数里,我更新了全局变量:hover_color = hover_text_color;。在这个例子中,我将它分配给你已经在你的小提琴中使用的变量,但hover_text_color应该替换为用户从选择器控件中选择的任何值。

  • 我添加了一个悬停函数到文档就绪javascript对象,并从全局变量设置.nav类的CSS。

 $('.nav').hover(function() { 
     $(this).css('color', hover_color); 
    }, 
    function() { 
     $(this).css('color', '#ffffff'); 
    });

基本上,当你设定.CSS的CSS实际应用CSS来的“风格”具有连接该类特定标签的属性,它不会修改CSS文件在内存或任何东西。所以当你运行悬停功能时,它几乎被遗忘了你试图对你的CSS类进行的更改。

对于懒惰的缘故,我只能让前景色变化,离开了非悬停前景色硬编码,很明显,你不会想;-)

+0

这看起来像一个简单的解决方案,将工作,但我仍然无法让nav_hover生效:http://jsfiddle.net/Y9EBt/5/任何想法? – ini

+0

upated:jsfiddle.net/Y9EBt/6 – ini

+0

我已更新我的答案,以解决如何修复更新后的更接近工作小提琴 –

0

:hover不能以这种方式作为选择使用。选择器的想法是,jquery将查找页面上的所有元素,其中当前与选择器匹配。虽然:hover我相信是不是一个有效的选择器,如果是这样,这个想法将是找到所有当前徘徊的元素,因为这是选择器如何工作。

另外,使用.css来设置一个元素的样式本质上只是将值添加到元素的style属性中。因此,自it is not possible to set the hover css directly in the style attribute以来,您无法使用.css进行设置。

相关问题