확인란 레이블의 jQuery 선택기


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

레이블이있는 확인란이있는 경우 jQuery를 사용하여 레이블을 선택하려면 어떻게해야합니까? 라벨 태그에 ID를 부여하고 다음을 사용하여 선택하는 것이 더 쉬울 $(#labelId)까요?

답변:


442

이것은 작동해야합니다 :

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

다음도 참조 : 선택기 / attributeEquals-jQuery JavaScript 라이브러리


3
웹킷 브라우저 (Safari / Chrome)의 경우에 $('#comedyclubs')[0].labels지정된 모든 레이블에 액세스 할 수 있습니다 #comedyclubs.
Matt

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이어야합니다.

46

이것은해야합니다 :

$("label[for=comedyclubs]")

아이디에 영숫자가 아닌 문자가 있으면 attr 값을 따옴표로 묶어야합니다.

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

2
이 답변이 주요 답변과 동일한 순간에 제출되었을 때 SO 평판이 어떻게 진행되는지 이상합니다. :)
sscirrus

표현 된 Attr : 따옴표 값 포위하기 위해 조언을 upvote에
gardarvalur

5

다른 해결책은 다음과 같습니다.

$("#comedyclubs").next()

12
이 확인란은 항상 레이블 다음에 나오는 항목이어야하므로 가장 안정적인 솔루션이 아닐 수 있습니다. 그래픽 재 설계로 인해이 논리가 깨질 수 있습니다.
Kip

3
권리! 그러나이 경우에는 잘 작동합니다 .D 더 안전한 버전을 위해 .next ( 'label') 또는 .prev ( 'label')를 정의 할 수 있습니다.
Briganti

약간의 안정화 개선 사항은 다음과 같습니다.$("#comedyclubs").nextAll().first()
sscirrus

당신의 접근 방식처럼. $ (). next (). text ()
Rm558

0

함수 내에서 반복하거나 연관시키는 동안 $ (this)을 사용하여 동일한 결과를 얻으려는 사람들에게 감사합니다.

$("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.