是否可以使用JQuery选择页面上的所有浮动?

是否可以使用JQuery选择页面上的所有浮动?,jquery,Jquery,我试图选择所有具有CSS计算样式float:left或float:right的元素。我在JQuery文档中看到了可用的属性选择器,但是我对CSS属性而不是属性感兴趣 这种功能的可能用例是选择页面上的say all display:none元素。一个想法是通过CSS应用浮动样式,然后您可以在类名上进行选择,并根据需要进行显示/隐藏 <style> .right { float: right; } .left { float: left; } </style&g

我试图选择所有具有CSS计算样式float:left或float:right的元素。我在JQuery文档中看到了可用的属性选择器,但是我对CSS属性而不是属性感兴趣


这种功能的可能用例是选择页面上的say all display:none元素。

一个想法是通过CSS应用浮动样式,然后您可以在类名上进行选择,并根据需要进行显示/隐藏

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

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

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

.right{float:right;}
.left{float:left;}
...
...
$('.left,.right').hide();

这应该可以在没有类黑客攻击的情况下实现:

$("*").filter( function() {
    return /^(left|right)$/.test( $(this).css("float") )
})
顺便说一下,jQuery已经有了一种很好的方法来查找所有
display:none
元素:

$(":hidden")

创建新的选择器很有趣,所以我做到了:

用法:

:hasCssAttr(属性、值…)

Property
是要用于比较的css属性

value
是您想要匹配的值(您可以有多个)

资料来源:

$.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;
}
$.expr[':'].hasCssAttr=函数(objNode、intStackIndex、arrProperties、arrNodeStack){
var arrArguments=arrProperties[3]。拆分(',');
var cssPropVal=$(objNode.css(arrArguments[0]);//需要速度
对于(var i=1;i
基本上,这会选择任何ol'css属性。我想如果只需要一个值,就可以消除循环,这是不必要的。另外,我想知道在评估中这样做是否更有趣,这样你就可以进行数值比较了。无论如何就在那里


$('.left.right')在本例中为空,因为您正在查找两个类都包含的元素。你的意思是$('.left,.right')?有趣的是,我最初是这样做的,然后一定是误读了文档。是的,逗号必须在那里。+1用于创建您自己的灵活选择器。如果可能的话,我总是喜欢灵活的解决方案。
$.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;
}