2013-02-15 39 views
5

は2つの可能性を次のマークアップ考えてみましょう:CSS属性セレクタ、複数のクラス、ワイルドカードを1つのクラス定義に適用できますか?

<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-invalid- NG-valid-をターゲットできるようにする必要があるよう

私は、問題を視覚化するためにフィドルを作成し、これは当然のソリューションではありません*

http://jsfiddle.net/mC2EW/

を決定using two css attribute selectors with *

// EDIT1と混同しないでください:あなたは、単に[class*="amount"]を使用することはできません理由があるフィドル

+0

'ng-x-VALUEdetermined'が' data'属性ではなくクラスに格納されている理由はありますか? –

+0

'ng'はAngularを使用していることを意味します。 ngClassディレクティブを使用して、必要な条件の下で特定のクラスを追加することはできませんか? – keithjgrant

+0

@keithjgrant。しかし、私は自分の指示を書いてはいけません。 Angularはこれらのクラスを自動的に生成します。これらのクラスを使用して入力ボックスのスタイルを調整したいと思います。 –

答えて

2

を申し訳ありませんが、これはセレクタだけではあなたの現在の状況を考えるとできません。属性セレクタには、値の途中でワイルドカードを使用する方法や、スペースで区切られた属性内の個々のコンポーネントをチェックすることはできません。クラスセレクタはそのような機能を提供しません。これはAngularJSやCSSのデザイン上の欠陥だと考えられますが、それが何であれ、純粋なCSSセレクタではできません。

には、があります。これは別の方法で回避できます。コメントで述べたように、簡単に選択できるようにカスタムクラスを追加するには、ng-classに簡単にフックするか、別の回答に示唆されているように、データ属性を使用して検証情報を格納することを検討してください。

+0

ありがとう、私はそれが可能ではなかったが恐れていたが、少なくとも今私は確認を持っています:)。回避策を作成するための他の答えを見ていきます。私は私の要求の可能性を説明するので、これを答えとしてマークしました。 –

2

を追加しました:質問 // EDIT2を簡素化?

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

+1

私は彼/彼女が有効/無効/ランダムフィールドにかかわらず、特に 'ng - (。*)決定 'を対象としていると信じています。 – sbeliv01

+0

私は自分の答えを変更しました。私は彼/彼女はクラス名としてデータを格納しようとしていると思います。私が思うところでは、「データ」がより適切になります。 –

+0

たぶん私は明確にしておかなければならないかもしれませんが、私は妥当性のために角度フラグを使用しています(ディレクティブを使って)。 Angularは "ng-invalid-amountdetermined"クラスを生成します。私はデータタグを調べる必要がありますが、質問に記載されているロジックは角度が自動的に生成するものです。私はそれに夢中になりたいと私は自分自身を書いていません。そのことを明らかにしないと申し訳ありません。 –

1

私はあなたがここで行うことができることを最高の.someclassを探し、それがまたも同様を決定したかどうかをチェックだと思う:

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

フィドル:http://jsfiddle.net/gaE5X/

+0

Hmmmm、私はsomeclassesが何であるかわからないし、私は自分のCSSセレクターで使用することはできません。私はこれを反映するために私の質問を更新します。問題は、上記の行がすべての入力フィールドを選択するということです。私は区別できる必要があります。私はそのためにjsFiddleを追加します。 –

0

これは古いものですが、私は同様の解決策を探していました。私は最高の答えを持っていると信じています。私の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; } 

それはあなたが同じ属性セレクタ内で複数のワイルドカードをターゲットにすることはできませんが、あなたがチェーンのワイルドカードは、あなたのターゲットを見つけるために、属性セレクタをできることが判明。

関連する問題