CSS セレクタによる要素テキストの選択
CSS セレクタは、HTML文書内の要素を指定するためのルールです。その中でも、要素のテキストに基づいて要素を選択する方法があります。
基本的な構文
element:contains(text)
text
: 要素のテキスト内容。element
: 対象とする要素のタグ名(例えば、p
,div
など)。
例
<p>This is a paragraph.</p>
<p>Another paragraph.</p>
p:contains("paragraph") {
color: blue;
}
このCSSルールは、テキスト内に「paragraph」を含むすべての<p>
要素を青色にします。
複数のテキスト条件
複数のテキスト条件を指定するには、:contains()
セレクタを連鎖させることができます。
p:contains("paragraph"):contains("This") {
color: red;
}
このルールは、テキスト内に「paragraph」と「This」の両方が含まれる<p>
要素を赤色にします。
大文字・小文字の区別
デフォルトでは、:contains()
セレクタは、大文字・小文字を区別します。大文字・小文字を無視するには、:icontains()
セレクタを使用します。
p:icontains("paragraph") {
color: green;
}
注意事項
:contains()
セレクタは、要素のテキスト内容が子要素のテキストも含めて検索されます。:contains()
セレクタは、要素のテキスト内容の完全一致ではなく、部分一致でもマッチします。
要素テキストに基づくCSSセレクタの例
HTMLコード
<p>This is a paragraph.</p>
<p>Another paragraph.</p>
<div>This is a div element.</div>
CSSコード
/* 要素のテキストが"paragraph"を含むすべての<p>要素を青色にする */
p:contains("paragraph") {
color: blue;
}
/* 要素のテキストが"paragraph"と"This"の両方を含むすべての<p>要素を赤色にする */
p:contains("paragraph"):contains("This") {
color: red;
}
/* 要素のテキストが"div"を含むすべての要素を緑色にする */
*:contains("div") {
color: green;
}
/* 要素のテキストが"This"を含むすべての要素を太字にする */
*:contains("This") {
font-weight: bold;
}
解説
- *:contains("This")
すべての要素のうち、テキスト内に「This」を含むものを選択します。 - p:contains("paragraph"):contains("This")
<p>
要素のうち、テキスト内に「paragraph」と「This」の両方が含まれるものを選択します。 - p:contains("paragraph")
<p>
要素のうち、テキスト内に「paragraph」を含むものを選択します。
JavaScriptを使用する
JavaScriptのDOM操作を使用して、要素のテキストに基づいてスタイルを適用することができます。
const paragraphs = document.querySelectorAll('p');
paragraphs.forEach(paragraph => {
if (paragraph.textContent.includes('paragraph')) {
paragraph.style.color = 'blue';
}
});
このコードは、すべての<p>
要素を取得し、そのテキスト内容が「paragraph」を含む場合に青色にします。
属性セレクタを使用する
特定の属性を持つ要素をターゲットにするために、属性セレクタを使用することもできます。ただし、要素のテキスト内容を直接指定することはできません。
<p data-content="paragraph">This is a paragraph.</p>
p[data-content="paragraph"] {
color: blue;
}
この例では、<p>
要素にdata-content
属性を追加し、その値に基づいてスタイルを適用しています。
カスタムデータ属性を使用する
カスタムデータ属性を使用して、要素に任意の情報を関連付けることができます。
<p data-text="paragraph">This is a paragraph.</p>
p[data-text="paragraph"] {
color: blue;
}
jQueryなどのJavaScriptライブラリを使用すると、要素のテキストに基づいてスタイルを適用するコードを簡潔に書くことができます。
$('p:contains("paragraph")').css('color', 'blue');
css css-selectors