Jquery – 使用display:block选择所有锚标签

我无法理解如何做到这一点?

给定一个充满锚标记的页面,我只想选择具有CSS属性display:block那些元素。

我想我可以使用jQuery循环(警告伪代码!)

 var myarray; $('a').each(function(arg1, arg2) { if ($(arg2).css('display')=='block') myarray.push(arg2); } 

但是,有没有更简单的方法?

您可以使用带有函数的filter作为参数。

 $('a').filter(function (index) { return $(this).css("display") === "block"; }) 

另一种方法是使用jQuery的属性选择器:

 $("a[style$='display: block;']") 

如果你想把它作为一个jquery工具(如果你经常使用它)。 您可以通过将以下代码添加到项目中来扩展“:”选择器:

 $.extend($.expr[':'], { "block": function(a, i, m) { return $(a).css("display") == "block"; } }); 

然后你可以通过这样说来选择所有的块锚:

 var res = $("a:block"); 

看这里的例子: http : //jsfiddle.net/zFatd/7/

[注意]正如您在示例中看到的,如果在自然块元素(即div)上使用“:block”,它仍将返回true。 (换句话说,“div:block”是真的,除非你特意给它以外的东西)

我假设display属性是通过具有某个类或其他属性来设置的。 这应该通过使用该属性使选择更简单。 此外,如果其他锚点被隐藏,您可以使用$('a:visible')选择器显示可见的锚点。

或者更简单:

 $("a:visible") 

//隐藏css显示为块的所有项目(慢):

 $('*').filter(function(index) { return $(this).css('display')=='block'; }).hide();