ですから、他の誰もがクラスを使用するように言っています - 彼らの言うことを聞いてください! それははるかに簡単です!
ただし、HTML コンテンツを変更できない場合もあります。その場合、対応するチェックボックスを見つけるために、ラベル要素内に含まれるすべてのテキストを調べる必要があります。
var selectedCheckboxes = [];
$.each($("#container > label"),function(index,elem){
var labelText = $(elem).text();
var testString = "Workshops";
if (labelText.match(testString)){
selectedCheckboxes = $(elem).find("input[type='checkbox']:checked");
}
});
このソリューションは、あなたが示した単純な例で機能することを警告する必要がありますが、マークアップがもう少し複雑な場合 (独自のテキスト コンテンツを持つ追加の子要素など)、このメソッドは ALOT を大きくし、ALOT をより複雑にする必要があります。 .
HTML マークアップ内の要素のテキスト コンテンツに一致する組み込みのセレクターはありません。要素のテキスト コンテンツは、データまたは情報の視覚的表現のみであるべきです。ID 情報を含めるべきではありません。要素とセットがその兄弟または子孫から離れていることを識別するために、属性id
とclass
属性を使用します。使用できるものは他にもありますが、これらは基本的な構成要素です。
ここで注意すべきことの 1 つは、jQuery の.text()
関数の動作です。そうなる :
子孫を含む、一致した要素のセット内の各要素の結合されたテキスト コンテンツを取得します。
強調を追加
:contains()
セレクターは子孫に関して同様の動作をしており、以前の回答で既に説明されています。
この制限のより実践的で視覚的な例に...
この最小限の HTML スニペットを考えると:
<div id="matt">
One
<span>Two</span>
<div>
<label>Three</label>
</div>
Four
</div>
を呼び出すと、次のように$("#matt").text()
なります。
一二三四
すべての子孫のテキスト コンテンツも含まれています...