【问题标题】:CSS attribute selector, multiple classes, wildcards applied to one class definition possible?CSS属性选择器,多个类,通配符应用于一个类定义可能吗?
【发布时间】:2020-01-30 18:49:22
【问题描述】:

考虑以下两种可能的标记:

<input class="someclass ng-valid ng-invalid-otherstuff ng-valid-amountdetermined   some-other-class">
<input class="someclass ng-invalid ng-valid-otherstuff ng-invalid-amountdetermined some-other-class">

“金额”是一个可变词,它可以是任何东西,“消息”、“帐户”,任何东西。我需要能够在 CSS 中做出区分。属性选择器失败,因为它考虑了 ^、*、| 的整个属性值。甚至~。

我需要挑出一个类,然后检查该类是否是“ng-valid-*determined”。在我看来,这根本不可能使用 css,还是我遗漏了什么?

一种解决方法是生成“ng-valid-determined*”,但这正是我想要避免的。有人对此有任何想法吗?作为澄清,我不知道''someclasses'是什么,我不能用它们来精确定位我的css选择器。问题正是我需要的类可能位于类数组中的任何位置。

我创建了一个小提琴来可视化问题,这当然不是解决方案,因为我需要能够定位 ng-valid-*determined 或 ng-invalid-*determined

http://jsfiddle.net/mC2EW/

不要与using two css attribute selectors with *混淆

//edit1:简化问题 //edit2: 添加了一个小提琴

【问题讨论】:

  • 是否有理由将 ng-x-VALUEdetermined 存储在类中而不是 data 属性中?
  • ng 暗示你正在使用 Angular。你不能只使用一个ngClass指令在你需要的条件下添加一个特定的类吗?
  • @keithjgrant 完全正确。但我希望 not 为此编写我自己的指令。 Angular 会自动生成这些类,我想加入这些类来设置我的输入框的样式。
  • 您不需要自己的指令。阅读 ngClass 一。向元素添加一个类应该不会有太大的危害。

标签: css css-selectors


【解决方案1】:

尽管这是一个旧的,但我一直在寻找类似的解决方案。我相信我有最好的答案,请看我的pen

HTML

<input class="someclass ng-valid ng-invalid-otherstuff
ng-valid-amountdetermined some-other-class"> <input class="someclass
ng-invalid ng-valid-otherstuff ng-invalid-amountdetermined
some-other-class">

CSS

[class*=ng-valid][class*=ng-invalid-otherstuff][class*=determined] {
background: #000; }
[class*=ng-invalid][class*=ng-valid-otherstuff][class*=determined] {
background: #ddd; }

事实证明,虽然您不能在同一个属性选择器中定位多个通配符,但您可以链接通配符属性选择器来找到您的目标。

【讨论】:

    【解决方案2】:

    抱歉,鉴于您目前的情况,仅使用选择器是不可行的。属性选择器无法在值的中间使用通配符,也无法检查以空格分隔的属性中的各个组件,类选择器也不提供此类功能。你可以认为这是 AngularJS 或 CSS 之一的设计缺陷,但不管它是什么,这对于纯 CSS 选择器是不可行的。

    您将必须以不同的方式解决这个问题。如 cmets 中所述,您可以轻松地连接到 ng-class 以添加自定义类以使选择更容易,或者按照另一个答案中的建议,考虑使用数据属性来存储验证信息。

    【讨论】:

    • 谢谢,我担心这是不可能的,但至少我现在有一个确认:)。我将研究其他答案以创建解决方法。我将此标记为答案,因为它解释了我的请求的(不)可能性。
    【解决方案3】:

    我认为您可以在这里做的最好的事情是查找 .someclass,然后检查它是否也有确定

    input.someclass[class*="determined"] { background-color: red; }
    

    小提琴:http://jsfiddle.net/gaE5X/

    【讨论】:

    • 嗯,我不知道 someclasses 是什么,我不能在我的 css 选择器中使用它们。我将更新我的问题以反映这一点。问题还在于上面的行将选择我所有的输入字段。我需要能够做出区分。我会为此添加一个 jsFiddle。
    【解决方案4】:

    你有什么理由不能简单地使用[class*="amount"]

    JSFiddle example.

    听起来您正在使用类来保存更适合 data-* 属性的内容。

    <input class="someClass determined" data-validity="valid" data-amount-determined="false" />
    <input class="someClass determined" data-validity="invalid" data-amount-determined="true" />
    

    JSFiddle example using data.

    【讨论】:

    • 我相信他/她正在尝试专门针对 ng-(.*)determined,而不管包含的有效/无效/随机字段如何。
    • 我已经修改了我的答案。我认为他/她正在尝试将数据存储为类名。我认为data 在这里更合适。
    • 也许我应该澄清一下,我使用角度标志来证明我的有效性(使用指令)。 Angular 生成“ng-invalid-amountdetermined”类。我需要查看数据标签,但问题中描述的逻辑是角度自动生成的。我想参与其中,而不是自己写。很抱歉从一开始就没有说清楚。
    猜你喜欢
    • 2015-03-02
    • 1970-01-01
    • 2012-06-19
    • 1970-01-01
    • 1970-01-01
    • 2011-06-07
    • 2012-02-24
    • 2017-01-17
    相关资源
    最近更新 更多