チェックボックスのラベル用のjQueryセレクター


237
<input type="checkbox" name="filter" id="comedyclubs"/>
<label for="comedyclubs">Comedy Clubs</label>

ラベルが記載されたチェックボックスがある場合、jQueryを使用してラベルを選択するにはどうすればよいですか?ラベルタグにIDを付けて、それを使用して選択する方が簡単でしょう$(#labelId)か?

回答:


440

これはうまくいくはずです:

$("label[for='comedyclubs']")

参照:Selectors / attributeEquals-jQuery JavaScriptライブラリ


3
Webkitブラウザ(Safari / Chrome)の場合、に$('#comedyclubs')[0].labels割り当てられて#comedyclubsいるすべてのラベルにアクセスできます。
マット、

1
.text()を使用してオブジェクトを文字列に変換します:alert($( "label [for = 'comedyclubs']")。text());
Loren

単に$( "label [for = 'comedyclubs']")を使用すると値が取得されますが、ラベルは空白になります。したがって、$( "label [for = 'comedyclubs']")。text()を使用してください
shahil

69
$("label[for='"+$(this).attr("id")+"']");

これにより、ループ内のすべてのフィールドのラベルも選択できるようになります。確認する必要があるのは、ラベルが定義されているフィールドのIDがfor='FIELD'どこFIELDにあるかをラベルに示すことだけです。


5
これは、複数のフィールドを持っている人にとっては素晴らしい答えです。この答えは#1でなければなりません。

45

これはそれを行うはずです:

$("label[for=comedyclubs]")

idに英数字以外の文字が含まれている場合は、attr値を引用符で囲む必要があります。

$("label[for='comedy-clubs']")

2
この回答が先頭の回答と同じ分で提出されたときのSOの評判の様子は奇妙です。:)
sscirrus 2013

attr値を引用符で囲むアドバイスへの
賛成投票

5

別の解決策は次のとおりです。

$("#comedyclubs").next()

12
これは、ラベルが常にチェックボックスの次のアイテムである必要があるため、最も安定したソリューションではない可能性があります。グラフィカルな再設計はこのロジックを壊すかもしれません。
Kip

3
正しい!ただし、この場合は:Dで正常に機能し、より安全なバージョンでは.next( 'label')または.prev( 'label')を定義できます。
Briganti、2011

マイナーの安定化の改善は次のようになります$("#comedyclubs").nextAll().first()
sscirrus

あなたのアプローチのように。$()。next()。text()
Rm558 2015

0

関数内で反復または関連付けを行いながら$(this)を使用して同じことを実現しようとしている可能性のある人には、Kipに感謝します。

$("label[for="+$(this).attr("id")+"]").addClass( "orienSel" );

このプロジェクトの作業中にしばらく探しましたが、良い例が見つからなかったので、同じ問題を解決しようとしている他の人に役立つことを願っています。

上記の例では、私の目的は、無線入力を非表示にし、ラベルをスタイルして、より滑らかなユーザーエクスペリエンスを提供することでした(フローチャートの向きを変更)。

ここで例見ることができます

この例が気に入ったら、CSSを以下に示します。

.orientation {      position: absolute; top: -9999px;   left: -9999px;}
    .orienlabel{background:#1a97d4 url('http://www.ifreight.solutions/process.html/images/icons/flowChart.png') no-repeat 2px 5px; background-size: 40px auto;color:#fff; width:50px;height:50px;display:inline-block; border-radius:50%;color:transparent;cursor:pointer;}
    .orR{   background-position: 9px -57px;}
    .orT{   background-position: 2px -120px;}
    .orB{   background-position: 6px -177px;}

    .orienSel {background-color:#323232;}

そしてJavaScriptの関連部分:

function changeHandler() {
    $(".orienSel").removeClass( "orienSel" );
    if(this.checked) {
        $("label[for="+$(this).attr("id")+"]").addClass( "orienSel" );
    }
};

ラベルが入力に続く場合、元の質問の代替ルートで、純粋なcssソリューションを使用して、JavaScriptをまったく使用しないようにすることができます...:

input[type=checkbox]:checked+label {}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.