jQuery проверяет, имеет ли элемент определенное свойство стиля inline
Мне нужно проверить, имеет ли элемент определенное свойство css, данное ему, но у меня возникли проблемы с использованием jQuery.функция css ().
свойство, которое я ищу-ширину.
если элемент не имеет определенной ширины и я попробовать это:
if(base.$element.css('width') !== 'undefined')
Я получаю вычисленную ширину браузера.
5 ответов
вот очень простой (вероятно, очень нуждается в улучшении) плагин, который я собрал вместе, что даст вам значение встроенного свойства стиля (и return 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
С пользовательской функцией camelcase, так как jQuery один из них, по-видимому, недокументирован и, вероятно, не годится для использования. Я просто использовал его здесь, так как он короче.
здесь пример работающего об этом. Обратите внимание, что в этом случае возвращаемое значение будет пустой строкой, если стиль не найден в элементе. Это все равно будет оценивать false
, так что выше if
заявление должно по-прежнему работать.
почему не просто:
var $el = $('element[style*="width"]');
и затем вы можете проверить его с:
if ( $el.length ) {
//...
}
использовать .attr
проверить .
if(base.$element.attr('style').length > 0) {
//...
}
если вы заботитесь о ширине, то
if(base.$element.attr('style').indexOf('width') !== -1) {
//...
}
Matthew вы можете проверить, является ли атрибут style неопределенным или нет
var attr = $(this).attr('style');
if (typeof attr !== 'undefined' ) {
}