2011-06-18 12 views
1

など、複数の要素がある場合は、1つずつ別の要素を選択します。 3つのレベルを言うことができます。
Div3の第2レベルのみを選択し、深さが分からない場合はどうすればよいでしょうか。
以上のクラスを与えることはできませんか?すべてのXタイプの要素を選択しますが、同じタイプではなく、

// html example of a possible DOM 
<div class="level1'> 
    <a> 
     <div> 
      <a> 
       <div></div> 
      </a> 
     </div> 
    </a> 
    <a> 
     <div></div> 
    </a> 
</div> 

セレクタは、概要:
div.level1 > div =>(BAD)事業部が内側にあるため、何も返さないだろうa

div.level1 > a > div =>(BAD)第二レベルのdivのは、より深いかもしれない、と正確なXPathはいけません

「要素を見つけても決して見つけられない」という種類のCSSセレクタの組み合わせがありますだからdiv.level1 divは第2レベルのみを返しますDivsではなく、それらの内部にあるかもしれないもの(そのようなもの)。私はこれを持っていることは非常に強力なものだとわかります。

+0

このようなセレクタが必要です。大きな力を与える。 CSSは悲しいことに多くの良いセレクタが欠けています – vsync

答えて

0


しかし、あなたはレベル> = 2(div.level1 div)で目的のプロパティを設定し、レベル2(div.level1 div div)以下のすべてのdivでそれを無効にすることができます。

もちろん、レベルごとに異なるクラスを使用するオプションがあります。

+0

はい、私は可能な限りクラスを使用しないことをお勧めします。ページ上の要素が多すぎると、クラスごとにページ全体の重量が増えるためです。 – vsync

+1

@vsync IMHO、帯域幅はあなたが心配しなければならない最後のものです。空白を節約するために、すべてのコードを1行に書くのと同じです。 –

+0

はい、私が今やっていることは、I DIDがキャッチしたかった要素に以前設定したすべてのプロパティをリセットしてリセットする必要があります。あなたの考えを投稿する時間を取ってくれてありがとう。 – vsync

0

あなたの最初のセレクタは絶対に素晴らしいです。次の例をご覧ください:

<style type="text/css"> 
    a, div { 
     display: block; 
     margin: 10px; 
     border: 1px solid grey; 
     background-color: red 
    } 
    div.level1 > div { 
     background-color: green; 
    } 
</style> 

第2レベルのDIVのみがdiv.level1の直接の子であるため、一致しています。

ところで、あなたのHTMLは全く意味がありません。インライン要素の中のDIVは悪いです。しかし、リンク内のリンクはさらに悪いです。

+0

私はこれを間違えました。最初のセレクタからは何も選択されません。なぜなら、main divに直接div子がないからです。私のhtmlは単なる例であり、私はそれが有効ではないことを知っています。私の本当の人生の必要性は、3つのレベルの深いテーブルのテーブルです。選ぶにはあまりにも多くのTDを、そして互いを乗り越える。 – vsync

+0

ニキータのソリューションですべてのdivを選択し、より深いものを上書きしてみてください。子ノードのレベルを選択するCSSセレクタはありません。他の唯一の解決策は、javaScriptを使って仕事をしていることです。たとえば、 Prototypes down()(http://api.prototypejs.org/dom/Element/down/)関数を使用して、特定のレベルを選択し、これらの要素にクラス名を追加します。しかし、あなたがしたいと思うように、あなただけのCSSでそれをすることはできません。ありがとう。 – 2ndkauboy

+0

私は、CSS委員会がまだファンシーなCSS3セレクタで狂ってしまう前に、基本について作業しなければならないと思います。このタイプのセレクタは多くを意味します。 – vsync

関連する問題