CSS おれおれ Advent Calendar 2012 – 13日目
今日はちょいと視点を変えて見ました。
jQueryの特徴的な機能として「CSSのセレクターを使って要素を検索できる」というのがあります。
ただしjQueryでは独自に拡張してCSS本来のセレクターよりも強力だったりします。逆にjQueryを普段から使っていてたまにCSSを書こうとすると迷う場面もありそうです。
というわけで、jQueryが独自に拡張しているセレクター一覧です。(属性非同値セレクター以外は全部疑似セレクターですね。)
全般
[name!="value"]
属性が指定の値でないものを検索します。
.not('[name="value"]')
の方が高速です。
意外とこれCSSにないんですよね。これ以外の、[name="value"]
とか[name|="value"]
とか諸々はあります。
:header
見出し要素、つまりh1
, h2
, …h6
を検索します。
ちなみにHTML的には、これらはheaderではなくheadingが正しい。中の人が間違えたんだと思います。が、二年前に修正提案が却下されています。検索速度への影響があるかもって話みたいだけど、なんだかなあ。
hgroup
やheader
は該当しません。
視覚
:animated
jQueryの .animate()
でアニメーションしている最中のものだけを選択します。
CSS3のtransitionやanimationには反応しないようです。
:visible
可視のもの(見えるもの)だけを選択します。
具体的に言うと領域を持つもの、です。なのでvisibility:hidden
やopacity:0
は透明ですが、可視と判断されます。またアニメーションの途中のものも可視と判断されます。
フォーム
:button
button, input[type='button']
と同じです。
input[type='submit']
, input[type='reset']
は該当しません。
:checkbox
input[type="checkbox"]
と同じです。
ちなみにチェックされたものを表す:checked
はCSSにもあります。
:file
input[type="file"]
と同じです。
:hidden
非表示の要素をを選択します。フォームの不可視項目に限りません。
以下の要素が該当します。
display:none
なものinput[type="hidden"]
のものwidth
,height
がいずれも0
のもの- 親が「非表示」のもの
:image
input[type="image"]
と同じです。
フォームではない画像要素img
は該当しません。
:input
各種のフォーム入力要素を検索します。
手動でやる場合はinput, button, textarea, select
あたりでしょうか。
:password
input[type="password"]
と同じです。
:radio
input[type="radio"]
と同じです。
ちなみに選択されているものは:checked
で得られます。
:reset
input[type="reset"]
と同じです。リセットボタンをまだ使ってるところってあまりないですが。
:submit
input[type="submit"], button[type="default"], button[type="submit"]
と同じです。
:text
input[type="text"]
と同じです。
textarea
は含まれません。
:selected
選択されているoption
を検索します。
JavaScript的には:checked
と対になっているイメージなんですが、CSSにはないんですね。まあselect > option
はあまりスタイルを設定する場面がなさそうではありますが。
順序
:first
, :last
ドキュメントツリーに出現した最初、最後のものを検索します。
似たものに:first-child
, :last-child
があります(これはCSSでもある)が、それらは各兄弟ごとに先頭、末尾のものを検索するのに対して、jQueryの:first
, :last
は本当に先頭、末尾のものひとつだけを検索します。
:even
, :odd
偶数、奇数個目のものを検索します。
:nth-child(2n)
, :nth-child(2n+1)
で代用できます。(これらはCSSでもある。)
:eq()
:eq(n)
としたとき、n番目のものだけを検索します。nは0
開始です。
:nth-child()
が近いですが、各兄弟ごとに検索するものです。:eq()
は検索結果全体に対してになります。また番号の開始が1
と0
という点も異なっています。
:gt()
, :lt()
大なり (Greater Than)、小なり (Less Than) です。nは0
開始です。
A, B, C, D, Eの五つの要素を検索したとして、:gt(2)
とするとD, Eを、:lt(2)
とするとA, Bをを得られます。
状態
:has()
指定のセレクターの要素を子孫に持つ要素、を検索します。
$('body:has(h1)')
の場合、得られるのは<h1 />
ではなく<body />
の方です。
セレクターよりメソッド .has()
の方が推奨されています。
:not()
指定のセレクターに合致しない要素、を検索します。
jQueryの場合はあらゆるセレクターを与える事ができます。CSSにも:not()
はあるのですが、そちらは単純なセレクターしか与える事ができません。
セレクターよりメソッド .not()
の方が推奨されています。
:parent
何かの親である要素、を検索します。指定の要素の親要素、ではありません。
例えば<div><img /></div>
のうち<div />
を得られます。また<div>Text</div>
でも同様に<div />
を得られますが、<div></div>
では何も得られません。
おしまい
フォーム入力欄を得るやつは将来削除される予定みたいなので、属性セレクター[name="value"]
に置き換えて使うようにした方が諸々よろしいかと存じます。
何卒宜しくお願い致します。