我需要检查一个元素是否有一个定义的css属性给它,但我有一些麻烦使用jQuery.css()函数。
我要找的属性是宽度。
如果元素没有定义的宽度,我试试这个:
if(base.$element.css('width') !== '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");
这是一个working example。
请注意,它只返回匹配集中第一个元素的值。
因为当未找到该样式属性时,它返回未定义,所以可以在您的情况下使用它,如下所示:
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函数替换$ .camelCase的使用,因为jQuery一个似乎是无证的,可能不好靠。我只是在这里使用它,因为它更短。
这是一个working example的那一个。注意,在这种情况下,如果在元素上找不到样式,返回值将是空字符串。这仍然会评估为false,所以上面的if语句仍然应该工作。