2010-03-29 55 views
2

我喜欢这一系列的div:jQuery选择 - 样式值

<div class="message" style="padding-left: 0px;">...</div> 
<div class="message" style="padding-left: 20px;">...</div> 
<div class="message" style="padding-left: 20px;">...</div> 
<div class="message" style="padding-left: 40px;">...</div> 
<div class="message" style="padding-left: 20px;">...</div> 

,我想作一个选择,将让我的div与填充大于20像素。

只使用jquery会有可能吗?或者我应该修改我的html树并添加一些属性来区分具有高填充值的元素?

回答

4

您可以使用filter用自定义功能。

$('div.message').filter(function(){ 
    return parseInt($(this).css('padding-left')) > 20; 
}); 

附:我不知道什么.css('padding') > 20就回去了,我想我需要测试它....

+3

'$(本)的.css( '填充左')> 20;'将返回'20px'的填充左值是'false',因为它不是数字。 – 2010-03-29 10:18:29

+0

所以'parseInt('20px')'会完成这项工作。但是如果你想要任何一方的填充物填充呢?换句话说'.css('padding')'会返回什么?做它的工作,或者你应该在功能中包含这个逻辑?这就是我所说的,我需要看看它。 – 2010-03-29 10:24:37

+0

如果您查看文档,您会发现'.css()'不支持简写属性。但是,如果在div元素上设置速记属性'padding',则无论如何,访问'.css('padding-left')'将返回正确的计算样式。 – 2010-03-29 13:37:08

1

您可以使用filter为此。

var elems = $('div.message').filter(function(){ 
       return parseInt($(this).css("padding-left"),10) > 20; 
      }); 

alert (elems.length); 

或使用每个你可以做这样的事情

$(function(){ 
    var elems = new Array(); 
    $("div.message").each(function(){ 
     if(parseInt($(this).css("paddingLeft"), 10) > 20) 
     { 
      elems.push($(this)); 
     }   
    }); 

    alert (elems.length); 
}); 
0

你可以使用filter()

var col = $('div').filter(function() 
{ 
    return parseInt($(this).css("padding-left")) > 20; 
}); 

,或者你可以创建自己的选择:

$.expr[':'].myselector = function(obj, index, meta, stack){ 
    return parseInt($(obj).css("padding-left")) > 20; 
}; 
var col = $("div:myselector"); 
1

您可以使用$('.message')选择器,然后使用loop通过您的元素找到一个与.css填充左设置为任何你想要的。

第二种解决方案,涉及使用custom selectors

您可以修改这个代码,我从我的博客了:

$.extend($.expr[':'], { 
    redOrBlue: function(o) { 
     return ($(o).css("color") == "red") 
       || ($(o).css("color") == "blue"); 
    } 
}); 

用法:

$('div:redOrBlue')