【问题标题】:Select all elements that have a specific CSS, using jQuery使用 jQuery 选择具有特定 CSS 的所有元素
【发布时间】:2010-11-16 06:57:41
【问题描述】:

如何使用 jQuery 选择应用了特定 CSS 属性的所有元素?例如:

.Title
{
    color:red;
    rounded:true;
}

.Caption
{
    color:black;
    rounded:true;
}

如何通过名为“rounded”的属性进行选择?

CSS 类名非常灵活。

$(".Title").corner();
$(".Caption").corner();

如何将这两个操作替换为一个操作。也许是这样的:

$(".*->rounded").corner();

有没有更好的方法来做到这一点?

【问题讨论】:

  • 大家好:请在回答之前阅读问题!这个可怜的家伙得到了五分之四的完全错误的答案。

标签: javascript jquery css jquery-selectors


【解决方案1】:

这是一个两年前的帖子,但它对我仍然有用,因此也许对其他人有用。这是我最终做的:

var x = $('.myselector').filter(function () { 
    return this.style.some_prop == 'whatever' 
});

没有我想要的那么简洁,但我从来没有需要过这样的东西,除非现在,而且我认为它对于一般用途来说并不是很有效。

【讨论】:

    【解决方案2】:

    谢谢你,比茹。我使用了您的解决方案,但使用了 jQuery .css 而不是纯 javascript,如下所示:

    var x = $('*').filter(function() {
        return $(this).css('font-family').toLowerCase().indexOf('futura') > -1
    })
    

    此示例将选择 font-family 属性值包含“Futura”的所有元素。

    【讨论】:

    • 是的,这个也对我有用。我保存了其中的a working jsfiddle,以备将来参考。
    • 你刚刚把我从长达 3 小时的心痛中解救出来。为此 +1
    • 虽然这可行,但请注意,这是一个非常繁重的操作,具体取决于 DOM 大小。如果您只需要页面的一部分,则将范围限制在该范围内。如果整个页面都需要这个,那么你可能需要在 css 级别而不是通过 JS 来更改它。
    【解决方案3】:

    您不能(使用 CSS 选择器)根据已应用于元素的 CSS 属性来选择元素。

    如果您想手动执行此操作,您可以选择文档中的每个元素,遍历它们,然后检查您感兴趣的属性的计算值(但这可能只适用于真正的 CSS 属性,而不是制作像rounded)。它也会很慢。

    更新以响应编辑 — group selectors:

    $(".Title, .Caption").corner();
    

    【讨论】:

    【解决方案4】:

    与Bijou的类似。只是一点点增强:

    $('[class]').filter(function() {
        return $(this).css('your css property') == 'the expected value';
      }
    ).corner();
    

    我认为使用 $('[class]') 更好:

    • 无需对选择器进行硬编码
    • 不会一一检查所有 HTML 元素。

    这是example

    【讨论】:

    • 如果你有 div.special > span > a 这样的选择器,那么优化就不够通用。
    【解决方案5】:

    这是一个干净、易于理解的解决方案:


    // find elements with jQuery with a specific CSS, then execute an action
    $('.dom-class').each(function(index, el) {
        if ($(this).css('property') == 'value') {
            $(this).doThingsHere();
        }
    });
    

    此解决方案不同,因为它不使用角、过滤器或返回。它是为更广泛的用户而设计的。

    要替换的东西:

    1. 用您的选择器替换“.dom-class”。
    2. 用您要查找的内容替换 CSS 属性和值。
    3. 将“doThingsHere()”替换为您想要执行的内容 找到元素。

    祝你好运!

    【讨论】:

    • 有人审查并删除了“祝你好运!”我的帖子结束。所以现在我不能祝人们好运吗?我已经回滚了我的答案。
    【解决方案6】:

    自定义CSS属性不继承,所以必须直接应用到每个元素上(即使你使用js动态添加属性,也应该通过添加类来实现),所以...

    CSS

    .Title
    {
        color:red;
    }
    
    .Caption
    {
        color:black;
    }
    

    HTML

    您根本不需要定义 rounded:true 属性。只需使用“圆形”类的存在:

    <div class='Title Rounded'><h1>Title</h1></div>
    <div class='Caption Rounded'>Caption</div>
    

    JS

    jQuery( '.Rounded' ).corner();
    

    【讨论】:

    • 这绝不是回答问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-13
    相关资源
    最近更新 更多