2012-07-03 17 views
29

要素に定義されたCSSプロパティがあるかどうかを確認する必要がありますが、jQuery.css()関数を使用するときに問題があります。要素に特定のスタイルプロパティがインラインで定義されているかどうかを確認するjQuery check

私が探しているプロパティは幅です。

要素が定義された幅を持っていないと、私はこれをしようとした場合:

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

私は、ブラウザの計算された幅を取得します。

答えて

45

ここであなたにインラインスタイルの値を取得します私は一緒に投げてきた(おそらく改善の多くを必要としている)非常に単純なプラグインですプロパティ(およびそのプロパティが見つからない場合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)); 

あなたはこのようにそれを呼び出すことができます

ここにはworking exampleがあります。

の最初の要素の値のみが一致するセットに戻されることに注意してください。

それは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)); 

をあなたはjQueryの1が文書化されていないように見えるとに依拠することはおそらく良いではないので、カスタムキャメルケース機能を$.camelCaseの使用を交換することができます。私はちょうどそれがより短いのでここでそれを使用しました。

ここには、working exampleがあります。この場合、要素にスタイルが見つからなかった場合、戻り値は空の​​文字列になります。それはまだfalseと評価されるので、上記のifのステートメントは引き続き動作するはずです。

+0

偉大な..最初のいくつかのreg - exのベースのソリューション..しかし、この作品は素晴らしい! – coolguy

+0

Jamesさん、ありがとうございました。 –

+0

@MatthewGrima - あなたが大歓迎です、私が助けることができてうれしいです:) –

7

.attrを使用してstyle属性を確認してください。あなたは、幅を気にしている場合

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

if(base.$element.attr('style').indexOf('width') !== -1) { 
    //... 
} 
+2

しかし、これは幅があるかどうかを確認しますか? – coolguy

+0

要素に他のスタイルがあるかどうかは気にしません。スタイル属性内に幅が定義されているかどうかを知る必要があります。 –

+1

@ubercoolukオペアンプはインラインスタイルかどうかをチェックするだけです。 'width'をチェックしたい場合は、' .indexOf( 'width')!== -1'のようにすることができます。 – xdazz

-3

スタイル属性が

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

これは質問が求めていることではありません。 'width'が' style'属性で定義されているかどうかを確認することを求めています。 –

25

なぜだけではなく、未定義であるかどうかをチェックすることができマシュー:

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

そしてあなたがそれをテストすることができますのチェック

if ($el.length) { 
    //... 
} 
+2

これははるかに良い解決策です!ありがとうございました ! – pmrotule

+0

私はそれが好きですが、この解決法は 'min-width'と 'max-width'にもマッチします。これは特にハイフネーションされていない 'width'を探すと問題になるかもしれません。 – Drey

6

例えば、「幅」:

if ($(element).prop("style")["width"] !== '') 
{...} 
関連する問題