32

我需要检查一个元素是否具有已定义的 css 属性,但我在使用 jQuery.css() 函数时遇到了一些问题。

我正在寻找的属性是宽度。

如果元素没有定义的宽度,我试试这个:

if(base.$element.css('width') !== 'undefined')

我得到了浏览器的计算宽度。

4

5 回答 5

48

这是我整理的一个非常简单(可能需要改进)的插件,它将为您提供内联样式属性的值(undefined如果找不到该属性则返回):

​(function ($) {
    $.fn.inlineStyle = function (prop) {
         var styles = this.attr("style"),
             value;
         styles && styles.split(";").forEach(function (e) {
             var style = e.split(":");
             if ($.trim(style[0]) === prop) {
                 value = style[1];           
             }                    
         });   
         return value;
    };
}(jQuery));

你可以这样称呼它:

//Returns value of "width" property or `undefined`
var width = $("#someElem").inlineStyle("width");

这是一个工作示例

请注意,它只会返回匹配集中第一个元素的值。

由于它undefined在未找到该样式属性时返回,因此您可以在您的情况下使用它,如下所示:

if (base.$element.inlineStyle("width")) {
    // It has a `width` property!
}

更新

这是一个短得多的版本。我意识到prop("style")返回一个对象,而不是字符串,并且该对象的属性对应于可用的样式属性。所以你可以这样做:

(function ($) {
    $.fn.inlineStyle = function (prop) {
        return this.prop("style")[$.camelCase(prop)];
    };
}(jQuery));

您可能想用$.camelCase自定义的驼峰式函数替换使用,因为 jQuery 似乎没有文档记录并且可能不太好依赖。我只是在这里使用它,因为它更短。

这是一个工作示例。请注意,在这种情况下,如果在元素上找不到样式,则返回值将是空字符串。那仍将评估为false,因此上述if语句应该仍然有效。

于 2012-07-03T08:10:28.540 回答
27

为什么不只是:

var $el = $('element[style*="width"]');

然后您可以使用以下方法对其进行测试:

if ( $el.length ) {
    //...
}
于 2014-04-01T16:53:54.970 回答
11

例如检查“宽度”:

if ($(element).prop("style")["width"] !== '')
{...}
于 2015-07-16T09:15:56.183 回答
8

用于.attr检查style属性。

if(base.$element.attr('style').length > 0) {
   //...
}

如果你关心宽度,那么

if(base.$element.attr('style').indexOf('width') !== -1) {
   //...
}
于 2012-07-03T08:06:47.533 回答
-3

马修,您可以检查样式属性是否未定义

    var attr = $(this).attr('style');
    if (typeof attr !== 'undefined' ) {
   }
于 2012-07-03T08:11:15.283 回答