| 目次 |
|---|
|
・CSSセレクタとは ・CSSセレクタの基本 ・階層関係 ・フィルタ(基本) ・フィルタ(属性抽出) ・フィルタ(入力フォーム) |
WEBページのレイアウトやデザインを扱う上で、CSS(Cascading Style Sheets カスケードスタイルシート)は、デザインスタイルを決定する重要なものです。
CSSの定義は、セレクタと各プロパティによって成り立ちます。
リスト1. CSSの基本形
#target, .targets, P {
CSSプロパティ : 値;
}
上記の例で言えば、「#target, .target, P」がセレクタになります。
jQueryでは、このCSSセレクタの仕組みを利用することで、目的のDOMオブジェクトを容易に特定できるようにしています。
CSSセレクタの基本は、id、クラス、要素タグにより 目的のDOMオブジェクトを特定することです。
リスト2. #id
<div id="sample2" class="Samples" >サンプル</div>
<script>
// id='smple2'のDOMオブジェクト
var sample2 = jQuery('#sample2').get();
// var sample2 = document.getElementById('sample2'); と同じ。
</script>
リスト3. #id
<div id="sample3_1" class="Samples Odd" >第1のサンプル</div>
<div id="sample3_2" class="Samples Even" >第2のサンプル</div>
<script>
// クラスに'Samples'を含むDOMオブジェクト
var samples = jQuery('.Samples').get();
// var samples = document.getElementsByClassName('Samples'); と同じ。
// 奇数のjQueryオブジェクト
var odd = jQuery('.Odd');
// 偶数のjQueryオブジェクト
var Even = jQuery('.Even');
</script>
リスト4. 要素タグ
<div id="sample4" class="Samples" >第1のサンプル</div>
<script>
// 全div要素のDOMオブジェクト
var divs = jQuery('div').get();
// var divs = document.getElementsByTagName('div'); と同じ。
</script>
リスト5. 全てを選択
<script>
// 全要素のDOMオブジェクト
var All = jQuery('*').get();
// 全要素の書体を'MS 明朝'に変更
function AllSerif(){
All.css('font-family','MS 明朝');
}
</script>
リスト6. セレクタの列記
<dl id="sample5_dl">
<dt class="Samples">定義リスト-1</dl>
<dd class="Samples">...</dd>
</dl>
<dl id="sample5_ul">
<li class="Samples">箇条書きリスト-1</li>
</ul>
<script>
// 全要素のDOMオブジェクト
var Lists = jQuery('dt.Samples,li.Samples').get();
// Samplesクラスの見出しと箇条書きにアンダーラインを引く。
function UnderLines(){
Lists.css('text-decoration','underline');
}
</script>
CSSは、各DOMオブジェクトの上下関係を「階層(カスケード)」としています。
この階層関係により、複雑なDOMオブジェクトの指定を、容易にできるようにしています。
jQueryでも、CSSの「階層(カスケード)」を用いてDOMオブジェクトの指定を行うことができます。
リスト7. 子孫関係
<dl id="sample7">
<dt>項目7-1</dt>
<dd><dl>
<dt>項目7-1-1</dt>
<dd>...</dd>
<dt>項目7-1-2</dt>
<dd>...</dd>
<dt>項目7-1-3</dt>
<dd>...</dd>
</dl></dd>
<dt>項目7-2</dt>
<dd><dl>
<dt>項目7-2-1</dt>
<dd>...</dd>
<dt>項目7-2-2</dt>
<dd>...</dd>
<dt>項目7-2-3</dt>
<dd>...</dd>
</dl></dd>
</dl>
<script>
// id='smple7'内のdt要素
var sample7 = jQuery('#sample7 dt').get();
</script>
実装例
リスト8. 親子関係
<dl id="sample8">
<dt>項目8-1</dt>
<dd><dl>
<dt>項目8-1-1</dt>
<dd>...</dd>
<dt>項目8-1-2</dt>
<dd>...</dd>
<dt>項目8-1-3</dt>
<dd>...</dd>
</dl></dd>
<dt>項目8-2</dt>
<dd><dl>
<dt>項目8-2-1</dt>
<dd>...</dd>
<dt>項目8-2-2</dt>
<dd>...</dd>
<dt>項目8-2-3</dt>
<dd>...</dd>
</dl></dd>
</dl>
<script>
// id='smple8'内のdt要素
var sample8 = jQuery('#sample8 dt').get();
</script>
実装例
リスト9. 前後関係
<dl id="sample9">
<dt>項目9-1</dt>
<dd><dl>
<dt>項目9-1-1</dt>
<dd>...</dd>
<dt id="myItem9" >項目9-1-2</dt>
<dd>...</dd>
<dt>項目9-1-3</dt>
<dd>...</dd>
</dl></dd>
<dt>項目9-2</dt>
<dd><dl>
<dt>項目9-2-1</dt>
<dd>...</dd>
<dt>項目9-2-2</dt>
<dd>...</dd>
<dt>項目9-2-3</dt>
<dd>...</dd>
</dl></dd>
</dl>
<script>
// id='myItem'の次の要素
var myItem9 = jQuery('#myItem9 + *').get();
</script>
実装例
リスト10. 兄弟関係
<dl id="sample10">
<dt>項目10-1</dt>
<dd><dl>
<dt>項目10-1-1</dt>
<dd>...</dd>
<dt id="myItem10" >項目10-1-2</dt>
<dd>...</dd>
<dt>項目10-1-3</dt>
<dd>...</dd>
</dl></dd>
<dt>項目10-2</dt>
<dd><dl>
<dt>項目10-2-1</dt>
<dd>...</dd>
<dt>項目10-2-2</dt>
<dd>...</dd>
<dt>項目10-2-3</dt>
<dd>...</dd>
</dl></dd>
</dl>
<script>
// id='myItem'と兄弟のdd要素
var myItem10 = jQuery('#myItem10 ~ dd').get();
</script>
実装例
上記のセレクタに「:(フィルタ)」をつけることにより、選択したDOMオブジェクトを更に絞り込むことができます。
CSS(CSS3を含む)で使用可能なフィルタに加えてjQuery特有のものもございます。
下記はその基本的なフィルタです。
リスト11. フィルタ(基本)
// 基本フィルタの実行
function Sample11(sw){
jQuery('#sample11 *').css('background-color','');
switch( sw ){
// 最初のtd要素
case ':first':
jQuery('#sample11 td:first').css('background-color','skyblue');
break;
// 最後のtd要素
case ':last':
jQuery('#sample11 td:last').css('background-color','skyblue');
break;
// #tr2を除くのtr要素
case ':not':
jQuery('#sample11 tr:not(#tr2)').css('background-color','skyblue');
break;
// 奇数行(最初は0行)
case ':odd':
jQuery('#sample11 tr:odd').css('background-color','skyblue');
break;
// 偶数行(最初は0行)
case ':even':
jQuery('#sample11 tr:even').css('background-color','skyblue');
break;
// 5番目のtd要素(0から始まるので、index=4)
case ':eq':
jQuery('#sample11 td:eq(4)').css('background-color','skyblue');
break;
// 5番目より前のtd要素(0から始まるので、index=4)
case ':lt':
jQuery('#sample11 td:lt(4)').css('background-color','skyblue');
break;
// 5番目より後のtd要素(0から始まるので、index=4)
case ':gt':
jQuery('#sample11 td:gt(4)').css('background-color','skyblue');
break;
// 「番目」を持つtd要素
case ':contains':
jQuery('#sample11 td:contains(番目)').css('background-color','skyblue');
break;
// 空のtd要素
case ':empty':
jQuery('#sample11 td:empty').css('background-color','skyblue');
break;
// 要素を持つtd要素
case ':has':
jQuery('#sample11 td:has(*)').css('background-color','skyblue');
break;
// b要素の親要素
case ':parent':
jQuery('#sample11 b:parent').css('background-color','skyblue');
break;
// 隠し要素
case ':hidden':
hiddenTR = jQuery('#sample11 *:hidden');
hiddenTR.show();
break;
// 可視要素
case ':visible':
jQuery('#sample11 td:visible').css('background-color','skyblue');
break;
// 各行2番目の子要素
case ':nth-child(index)':
jQuery('#sample11 td:nth-child(2)').css('background-color','skyblue');
break;
// 各行奇数番目の子要素
case ':nth-child(odd)':
jQuery('#sample11 td:nth-child(odd)').css('background-color','skyblue');
break;
// 各行偶数番目の子要素
case ':nth-child(even)':
jQuery('#sample11 td:nth-child(even)').css('background-color','skyblue');
break;
// 各行3n番目の子要素
case ':nth-child(equation)':
jQuery('#sample11 td:nth-child(3n)').css('background-color','skyblue');
break;
// 各行最初の子要素
case ':first-child':
jQuery('#sample11 th:first-child').css('background-color','skyblue');
break;
// 各行最後の子要素
case ':last-child':
jQuery('#sample11 td:last-child').css('background-color','skyblue');
break;
// 各行一つしかない子要素
case ':last-child':
jQuery('#sample11 th:only-child').css('background-color','skyblue');
break;
// 初期化
default:
try{
hiddenTR.hide();
}
catch(e){}
break;
}
}
実装例
| 第1列 | 第2列 | 第3列 | |
|---|---|---|---|
| 第1行 | 1番目 | 要素あり | |
| 第2行 | 5番目 | ||
| 第4行 | ラスト | ||
| 第5行 |
各要素の属性によりDOMオブジェクトを特定するフィルタです。
リスト12. フィルタ(属性抽出)
// 属性抽出の実行
function Sample12(sw){
jQuery('#sample12 li').css('background-color','');
switch( sw ){
// title属性がある項目
case '存在':
jQuery('#sample12 li[title]').css('background-color','skyblue');
break;
// title属性が"2番目"の項目
case '=':
jQuery('#sample12 li[title=2番目]').css('background-color','skyblue');
break;
// title属性が"2番目"でない項目
case '!':
jQuery('#sample12 li[title!=2番目]').css('background-color','skyblue');
break;
// title属性が"「"で始まる項目
case '^':
jQuery('#sample12 li[title^=「]').css('background-color','skyblue');
break;
// title属性が"目」"で終わる項目
case '$':
jQuery('#sample12 li[title$=目」]').css('background-color','skyblue');
break;
// title属性が"番目"を含む項目
case '*':
jQuery('#sample12 li[title*=番目]').css('background-color','skyblue');
break;
// title属性が"最"を含み、"最後"でない項目
case '複数':
jQuery('#sample12 li[title*=最][title!=最後]').css('background-color','skyblue');
break;
default:
break;
}
}
実装例
入力フォームのDOMオブジェクトを特定するフィルタです。
リスト13. フィルタ(入力フォーム)
// 入力フォーム抽出の実行
function Sample13(sw){
jQuery('#sample13 *').css('background-color','');
switch( sw ){
// 入力フォーム
case 'input':
jQuery('#sample13 *:input').css('background-color','skyblue');
break;
// テキスト入力
case 'text':
jQuery('#sample13 *:text').css('background-color','skyblue');
break;
// パスワード入力
case 'password':
jQuery('#sample13 *:password').css('background-color','skyblue');
break;
// ラジオボタン
case 'radio':
jQuery('#sample13 *:radio').fadeOut(1000,function(){jQuery(this).show();});
break;
// チェックボックス
case 'checkbox':
jQuery('#sample13 *:checkbox').fadeOut(1000,function(){jQuery(this).show();});
break;
// submitボタン
case 'submit':
jQuery('#sample13 *:submit').css('background-color','skyblue');
break;
// resetボタン
case 'reset':
jQuery('#sample13 *:reset').css('background-color','skyblue');
break;
// ボタン
case 'button':
jQuery('#sample13 *:button').css('background-color','skyblue');
break;
// 利用可能
case 'enabled':
jQuery('#sample13 *:enabled').fadeOut(1000,function(){jQuery(this).show();});
break;
// 利用不可
case 'disabled':
jQuery('#sample13 *:disabled').fadeOut(1000,function(){jQuery(this).show();});
break;
// チェック
case 'checked':
jQuery('#sample13 *:checked').fadeOut(1000,function(){jQuery(this).show();});
break;
// 選択
case 'selected':
jQuery('#sample13 *:selected').fadeOut(1000,function(){jQuery(this).show();});
break;
default:
break;
}
}
実装例