2009-05-08 4 views
5

Я пытаюсь выбрать все элементы с CSS-вычисляемым стилем float: left или float: right. Я вижу селектора атрибутов, доступные в документации JQuery, однако меня интересуют свойства CSS, а не атрибуты.Можно ли выбрать все поплавки на странице с помощью JQuery?

Возможными вариантами использования такой функции являются выбор всего отображения: на странице отсутствуют элементы.

+0

Отличный вопрос! – KyleFarris

ответ

1

Одной из идей было бы применить плавающий стиль через CSS, после чего вы могли бы выбрать его имя и сделать шоу/скрыть по мере необходимости.

<style> 
    .right { float: right; } 
    .left { float: left; } 
</style> 

<div class='left'>...</div> 
<div class='right'>...</div> 

    $('.left,.right').hide(); 
+0

$ ('. Left.right') будет пустым в этом случае, так как вы ищете элементы с обоими классами. Вы имели в виду $ ('. Left, .right')? –

+0

Интересный бит заключается в том, что я использовал его таким образом изначально, а затем, должно быть, неправильно прочитал документацию. Да, запятая должна быть там. – tvanfosson

5

Это должно сделать трюк без класса взлома:

$("*").filter(function() { 
    return /^(left|right)$/.test($(this).css("float")) 
}) 

Кстати, JQuery уже есть хороший способ, чтобы найти все display: none элементы:

$(":hidden") 
5

Создание новых селекторов весело, поэтому я сделал это:

Usa GE:

: hasCssAttr (имущество, стоимость ...)

Property это свойство CSS вы хотели бы использовать, чтобы сравнить

value это значение (ы) вы хотели бы, чтобы соответствовать против (вы можете иметь более чем один)

$(':hasCssAttr(float, left)').css('float', 'right'); 

источник Луки:

$.expr[':'].hasCssAttr = function(objNode, intStackIndex, arrProperties, arrNodeStack) { 
    var arrArguments = arrProperties[3].split(','); 
    var cssPropVal = $(objNode).css(arrArguments[0]); // need for speed 
    for (var i = 1 ; i < arrArguments.length ; i++) 
    if (cssPropVal == arrArguments[ i ].replace(/^\s+|\s+$/g,"")) 
     return true;  
    return false; 
} 

В принципе, это выбирает свойство ol 'css. Полагаю, вы могли бы исключить цикл, если бы вы хотели только одно значение, ненужное. Кроме того, я задаюсь вопросом, может ли быть более интересным сделать это в eval, чтобы вы могли выполнять численные сравнения. Так или иначе. Вот оно.

Props to Ben for helping me out.

+0

+1 для создания собственного гибкого селектора. Я всегда предпочитаю гибкие решения, когда это возможно. – KyleFarris

Смежные вопросы