JQuery селектор для метки флажка


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

Если у меня есть флажок с меткой, описывающей его, как я могу выбрать метку с помощью jQuery? Будет ли проще присвоить метке метки идентификатор и выбрать его с помощью $(#labelId)?

Ответы:


442

Это должно работать:

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

Смотрите также: Селекторы / attributeEquals - jQuery JavaScript Library


3
Для браузеров Webkit (Safari / Chrome) вы можете $('#comedyclubs')[0].labelsполучить доступ ко всем назначенным ярлыкам #comedyclubs.
Мэтт

1
Используйте .text () для преобразования объекта в строку: alert ($ ("label [for = 'comedyclubs']"). Text ());
Лорен

простое использование $ ("label [for = 'comedyclubs']") даст вам значение, но метка будет пустой. Итак, используйте $ ("label [for = 'comedyclubs']"). text ()
shahil

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

Это должно позволить вам выбирать метки для всех полей в цикле. Все, что вам нужно, это убедиться, что ваши ярлыки должны указывать, for='FIELD'где FIELDнаходится идентификатор поля, для которого определяется этот ярлык.


5
Это отличный ответ для тех, кто имеет более одного поля. Этот ответ должен быть № 1.

46

Это должно сделать это:

$("label[for=comedyclubs]")

Если в вашем идентификаторе есть не алфавитно-цифровые символы, вы должны заключить значение attr в кавычки:

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

2
Странно, как так выглядит репутация, когда этот ответ был представлен в ту же минуту, что и ведущий. :)
sscirrus

Upvote за совет окружить значение attr кавычками :)
gardarvalur

5

Другое решение может быть:

$("#comedyclubs").next()

12
это может быть не самое стабильное решение, так как требует, чтобы метка всегда была следующим элементом после флажка. графический дизайн может нарушить эту логику.
Кип

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 {}
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.