Jquery - 选择所有带有display:block的锚标签

时间:2011-10-03 16:04:57

标签: jquery jquery-selectors

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

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

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

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

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

6 个答案:

答案 0 :(得分:9)

您可以将filter与函数一起用作参数。

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

答案 1 :(得分:6)

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

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

答案 2 :(得分:3)

如果你想把它作为一个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”是真的,除非你特意给它以外的东西)

答案 3 :(得分:0)

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

答案 4 :(得分:0)

或者更简单:

$("a:visible")

答案 5 :(得分:-1)

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

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