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));

$.camelCasejQuery の使用は文書化されていないようで、おそらく依存するのには適していないため、の使用をカスタムのキャメルケース関数に置き換えることをお勧めします。短いのでこちらにしました。

これがその実例です。この場合、要素にスタイルが見つからなかった場合、戻り値は空の​​文字列になることに注意してください。それはまだ評価される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 に答える