2009-09-03 60 views
4

如何使用jQuery來確定某個元素是否具有某種內聯樣式集。jquery檢索直接在元素上設置的css樣式

E.g,給定文檔

<style> 
.MyClass { position: relative } 
</style> 
... 
<div class="MyClass" id="div1" style="position: absolute"/> 
<div class="MyClass" id="div2"/> 
... 
<script> 
function f() { 
    assert($('#div1').SOMETHING('position') == 'absolute'); 
    assert($('#div2').SOMETHING('position') == ''); 
} 
</script> 

如果我使用的CSS( '位置'),DIV2其報告爲 '相對'。我怎樣才能確定哪些樣式實際上是內聯設置的?

+0

如果'css('position')'表示相對,那是因爲它被設置爲相對於您的CSS類MyClass ... div1,但應該報告爲「絕對」。 – peirix 2009-09-03 11:25:13

+0

@peirix:我知道,渲染是正確的。但是,我想知道我是否將它設置爲內聯。有時我會設置位置:相對內聯,所以我需要區分所有這些情況。 – erikkallen 2009-09-03 11:30:28

+0

哦。所以你問的是,如果有一種方法可以知道某種風格是內聯還是使用CSS標記?在這種情況下,我真的不認爲有,除非檢查它的樣式屬性爲TTG下面的建議,並解析它的信息... – peirix 2009-09-03 11:36:52

回答

2

我落得這樣做

assert($('#div2').get(0).style.position == 'relative'); 

,但我希望做一個更jQueryish方式。

+0

您可以將此代碼放入自定義選擇器中,正如我在 – 2009-09-03 14:49:51

+1

以下的答案中所描述的那樣,但它不會幫助我。我的問題是「給定這個元素,它的位置是否設置爲相對?」,但是讓自定義選擇器可以解決問題「給定這些對象,哪些對象的位置設置爲相對?」。這也可能是某人需要解決的問題,但不是我,至少不是現在。 – erikkallen 2009-09-03 17:13:15

1

.attr('style')
這裏是a link到jQuery文檔。

+0

只要記住,如果你使用attr('style')'你得到'位置:相對「作爲回報,以及其他任何內聯風格...... – peirix 2009-09-03 11:27:40

+0

我可以這樣做,但是接下來我必須解析返回的字符串。我將設置比內嵌位置更多的樣式。 – erikkallen 2009-09-03 11:29:28

3

您可以創建自己的自定義選擇:

$(document).ready(function(){ 
    $.extend($.expr[':'], { 
     positionAbsolute: positionAbsolute, 
    }); 
}); 

function positionAbsolute(el) { 
    return $(el).css("position").indexOf("absolute") >= 0; 
} 

再訪問此像這樣

if ($("#MyDiv").is(":positionAbsolute")){ 
    alert("Position absolute"); 
} 

是否風格已成爲內聯?如果你在一個CSS類,例如,

.positionAbsolute{position: absolute} 

宣佈它,然後你可以使用一個類來代替selctor:

if ($("#MyDiv").is(".positionAbsolute")){ 
    alert("Position absolute"); 
} 
+0

+1。不是因爲它解決了我的問題,而是因爲這是一件非常酷的事情。但是,由於在問題中陳述的原因,我不能使用.css('position') – erikkallen 2009-09-03 13:30:55

+0

剛剛得到了投票,並沒有解釋。這真讓我很不高興(不是倒票,而是缺乏解釋)。 – 2010-08-17 15:38:37

-1

那麼你可以只使用的CSS方法,這將返回所有的附加到該元素的樣式。

+0

我在問題中說過爲什麼我不能那樣做。 – erikkallen 2009-09-03 12:39:26