2010-03-29 5 views
2

я получил серию дивы вроде этого:селектора 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> 

И я хотел бы сделать селектор, который получил бы мне дивы с дополнением большим затем 20px.

Можно ли использовать только jquery? Или мне нужно изменить мое дерево html и добавить некоторый атрибут, который бы отличал эти элементы с высоким значением дополнения?

ответ

4

Вы можете использовать filter с пользовательской функции.

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

P.S. Я не уверен, что .css('padding') > 20 вернется, я думаю, мне нужно, чтобы проверить это ....

+3

'$ (это) .css ('обивка левый')> 20;' вернется 'false' для значения padding-left' 20px', потому что это не число. –

+0

Итак, 'parseInt ('20px')' выполнит эту работу. но как насчет того, хотите ли вы заполнить большую часть ЛЮБОЙ стороны? другими словами, что '.css ('padding')' вернется? сделайте это, или вы должны включить эту логику в функцию тоже? вот что я сказал, мне нужно посмотреть на это. –

+0

Если вы посмотрите на документы, вы увидите, что стенографические свойства не поддерживаются '.css()'. Однако, если короткое свойство 'padding' было установлено в элементе div, доступ к' .css ('padding-left') 'будет возвращать правильный, вычисленный стиль в любом случае. –

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 padding-left, установленный на все, что вы хотите.

Второе решение включает использование custom selectors.

Вы можете изменить этот код, который я взял из моего блога:

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

Использование:

$('div:redOrBlue')