2011-06-15 81 views
1

根据标题真的。如何检查css属性是否设置?

如果注意到如果我检查$(elem).css('margin-top'),它将返回0px,即使我没有明确地设置此样式,无论是内联样式还是样式表。

基本上我每次将鼠标悬停在一个元素上(以垂直对齐某些内容)时都会设置边距,所以宁愿只做一次。

我无法在页面加载时设置对齐方式,因为元素被隐藏(display:none),所以需要在显示时进行。

+1

其实边距设置,甚至在不显示它的工作。 http://jsfiddle.net/ZnbCn/ – Bakudan 2011-06-15 16:48:37

回答

4
if(!$(elem).data('hasSetMargin')){ 
    $(elem).css('margin-top', someValue); 
    $(elem).data('hasSetMargin', true); 
} 
2

设置好几次会出现什么问题?

它看起来像你想尽早优化你的代码。

+0

我不会将此作为早期优化。我的要求是设置一次。如果有一种简单的方法可以做到这一点,而不是在每次悬停时都进行保证金计算,那么我愿意选择这个选项。 – 2011-06-15 18:28:21

1

这并不容易分辨,因为有许多来源会影响款式的价值,如margin-top

不过,你不需要告诉真的是因为:

  1. 设置比一次更应该在你的情况下,没有坏处。
  2. 您可以通过添加/删除/切换HTML类(addClass/removeClass/toggleClass)和(使用类选择)的代替设置自己的风格造型与纯静态CSS元素提高你的代码。这有助于使代码可读。

关于可读性 - 你会喜欢读什么?这:

function() { 
    $(selector).css('margin-top', '10px').css('border', '2px red solid'); 
} 

或本:

function() { 
    $(selector).addClass('update-pending'); 
} 
+0

不幸的是我不能使用类。保证金是基于一个元素的内容计算的,所以它不是一个仅仅添加一个css类的问题。虽然你说不止一次设定保证金是没有害处的,但似乎没有必要。 @ Spycho的解决方案可能是解决这个问题的方法。 – 2011-06-15 18:32:31