jQuery入門道場 jQueryの使い方

2章 セレクター

コンテントフィルター

コンテントフィルターは、要素が含んでいるコンテント(中身)に応じて、更に要素を絞り込む時に使います。

:contains()、:has()

:contains(text) の形で、textという文字を含んでいる要素を選択します。
:has(selector) の形で、selectorで指定した要素を含む要素のみを選択します。

具体例で見てみましょう。まずは、:contains(text)の場合から。

<div>太郎</div>
<div>次郎</div>
<div>三郎</div>
<div>花子</div>
$("div:contains('郎')").css("color", "red");

この結果は、以下のようになります。

次に、:has()の場合

<div><span>山田</span>太郎</div>
<div>次郎</div>
<div>三郎</div>
<div>花子</div>
$("div:has(span)").css("color", "red");

この結果は、以下のようになります。

span要素を含んだdivのみが選択されています。
(spanは、直接の子供に限らず、子孫であれば大丈夫です)

:empty、:parent

:emptyは、何ら子要素を持たない要素を選択します。
:parentは、何かしらの子要素を持つ要素を選択します。つまり、親要素のみが対象になります。

(注)ここでの子要素は、単なるテキスト(テキストノード)も含みます。
:emptyと :parent、とても反対語とは言えない2つですが、機能的にはそれぞれ反対の作用をします。

具体例で見てみましょう。

<table border="1">
  <tr>
    <td>太郎</td>
    <td></td>
    <td>三郎</td>
  </tr>
    <tr>
    <td></td>
    <td>マイク</td>
    <td></td>
  </tr>
</table>
$("td:empty").css("background-color", "gray");
$("td:parent").css("background-color", "yellow");

この結果は、以下のようになります。

なおこれらとは別に、メソッドの.empty().parent()、.parents()というのもあります。