2009-09-03 32 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