2012-07-03 22 views
29

satırında tanımlı belirli bir özellik özelliğine sahip olup olmadığını kontrol edin Bir öğenin kendisine verilen tanımlı bir css özelliği olup olmadığını kontrol etmem gerekiyor, ancak jQuery.css() işlevini kullanırken sorun yaşıyorum.jQuery öğesinin,

aradığım özellik genişliğidir.

eleman tanımlı bir genişliğe sahip değilse ve bu deneyin:
if(base.$element.css('width') !== 'undefined') 

ben tarayıcının bilgisayarlı genişliğini olsun.

cevap

45

İşte size bir satır içi stil değerini alacak bir araya atılan ettik (muhtemelen iyileşme çok ihtiyaç) çok basit bir eklenti bulunmaktadır mülkiyet (ve undefined dönmek bu özellik bulunmazsa):

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

böyle diyebilirsin:

//Returns value of "width" property or `undefined` 
var width = $("#someElem").inlineStyle("width"); 

İşte bir working example.

Yalnızca eşleşen kümedeki ilk öğesinin değerini döndüreceğini unutmayın. o tarz mülkiyet bulunmazsa zaman undefined, bu gibi bir durumda kullanabilirsiniz döndürür yana

:

if (base.$element.inlineStyle("width")) { 
    // It has a `width` property! 
} 

Güncelleme

Burada çok, çok daha kısa versiyonu . prop("style") öğesinin bir dize değil bir nesne döndürdüğünü ve bu nesnenin özelliklerinin kullanılabilir stil özelliklerine karşılık geldiğini fark ettim. Yani sadece bunu yapabilirsiniz:

(function ($) { 
    $.fn.inlineStyle = function (prop) { 
     return this.prop("style")[$.camelCase(prop)]; 
    }; 
}(jQuery)); 
jQuery biri belgelenmemiş gibi görünüyor ve muhtemelen güvenmek iyi olmadığından, özel bir CamelCase fonksiyonu ile $.camelCase kullanımını değiştirmek isteyebilir

. Onu daha kısa olduğu için burada kullandım.

İşte o birinin bir working example bu. Bu durumda, stil öğe üzerinde bulunmadıysa, dönüş değeri boş dizge olacaktır. Bu hala false için değerlendirecek, bu nedenle yukarıdaki if deyimi hala çalışmalıdır.Stil niteliği

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

Harika .. bazı reg-ex tabanlı çözümler olsa rağmen ... bu iş sonra harika! – coolguy

+0

Teşekkürler James, harika çalıştı. –

+0

@MatthewGrima - Rica ederim, yardımcı olabilirim :) –

7

style özniteliğini denetlemek için .attr kullanın. O zaman, genişlik önem veriyorsanız

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

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

Fakat bu genişlikli olup olmadığını nasıl kontrol eder? – coolguy

+0

Öğenin başka stilleri olup olmadığını umursamıyorum, stil niteliğinde tanımlanan bir genişliğin olup olmadığını bilmem gerekiyor. –

+1

@ubercooluk Sadece satır içi stil olup olmadığını kontrol etmek gerekiyor. Eğer 'width' kontrol etmek istiyorsanız, o zaman .indexOf ('width')! == -1 ' – xdazz

-3

Matthew kontrol edebilirsiniz Neden sadece:

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

Sonra ile test edebilirsiniz:

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

Bu, soruyu sorduğu şey değil. "Stil" özelliğinde bir "genişliğin" tanımlanıp tanımlanmadığını sormaktır. –

25

tanımsız olup olmadığını

+2

Bu, en iyi çözüm! Teşekkür ederim ! – pmrotule

+0

Bunu beğendim, ancak bu çözüm ayrıca 'tire genişliği' ve 'maksimum genişlik' ile de eşleşecek, özellikle de tirelenmemiş 'genişlik' arandığında sorun yaratabilir. – Drey

6

denetleniyor "genişlik" örneğin:

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