Jquery 如何检查是否设置了css属性?

Jquery 如何检查是否设置了css属性?,jquery,Jquery,按照标题真的 如果注意,如果我选中$(elem).css('margin-top'),它将返回0px,即使我没有显式地设置此样式,无论是内联样式还是在样式表中 基本上,每次我将鼠标悬停在某个元素上时都会设置边距(以垂直对齐某些内容),所以我宁愿只执行一次 我无法在页面加载时设置对齐方式,因为元素是隐藏的(显示:无),所以需要在显示时进行对齐。多次设置有什么问题 if(!$(elem).data('hasSetMargin')){ $(elem).css('margin-top', som

按照标题真的

如果注意,如果我选中
$(elem).css('margin-top')
,它将返回
0px
,即使我没有显式地设置此样式,无论是内联样式还是在样式表中

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


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

多次设置有什么问题

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

看起来您正在尝试提前优化代码。

多次设置有什么问题


看起来您正在尝试尽早优化代码。

这不容易判断,因为有许多来源会影响样式的值,例如
边距顶部

但是,你不需要说真的,因为:

  • 在你的情况下,设置多次应该不会有什么坏处
  • 您可以通过添加/删除/切换HTML类(
    addClass
    /
    removeClass
    /
    toggleClass
    )和使用纯静态CSS(使用类选择器)设置元素样式(而不是自己设置样式)来改进代码。这样做的另一个好处是使代码可读
  • 关于可读性,你更喜欢读什么?这:

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

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

    这不容易区分,因为有许多来源会影响样式的值,例如
    margintop

    但是,你不需要说真的,因为:

  • 在你的情况下,设置多次应该不会有什么坏处
  • 您可以通过添加/删除/切换HTML类(
    addClass
    /
    removeClass
    /
    toggleClass
    )和使用纯静态CSS(使用类选择器)设置元素样式(而不是自己设置样式)来改进代码。这样做的另一个好处是使代码可读
  • 关于可读性,你更喜欢读什么?这:

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

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

    实际上,即使未显示边距,边距也已设置并起作用。实际上,即使未显示边距,边距也已设置并起作用。我不认为这是早期优化。我的要求是设置一次。如果有一种简单的方法可以做到这一点,而不是在每次悬停时都进行保证金计算,那么这就是我想要的选择。我不会将其归类为早期优化。我的要求是设置一次。如果有一种简单的方法可以做到这一点,而不是在每次悬停时都执行保证金计算,那么这就是我想要的选项。不幸的是,我不能使用类。边距是根据元素的内容计算的,因此这不是仅仅添加css类的问题。虽然你说不止一次设定保证金没有坏处,但这似乎仍然没有必要@Spycho的解决方案可能就是这个问题的解决方案。不幸的是,我不能使用类。边距是根据元素的内容计算的,因此这不是仅仅添加css类的问题。虽然你说不止一次设定保证金没有坏处,但这似乎仍然没有必要@Spycho的解决方案可能就是这个问题的解决方案。