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) {
   //...
}

проверка "ширины", например:

if ($(element).prop("style")["width"] !== '')
{...}

Matthew вы можете проверить, является ли атрибут style неопределенным или нет

    var attr = $(this).attr('style');
    if (typeof attr !== 'undefined' ) {
   }