jQuery выбрать элементы, когда атрибут содержится в списке атрибутов?

Лучше объяснить на примере (я очень новичок в jQuery, извините заранее):

// Selector for checkboxes not checked
var checkboxes = "input:checkbox:not(:checked)";

// Selector for labels relative to checkboxes not checked
var labels = "label[for=" + $(checkboxes).attr("id") + "]";

$(checkboxes + ", " + labels]).FadeTo("slow", 0.45);

Это работает для флажков, но не для ярлыков (как ни странно, выбирается только один ярлык).

Вопрос: как выбрать "прикрепленные" ярлыки? И как .attr("name") на самом деле работает, когда выбрано более одного элемента (возвращает массив, составной список или... что?).

3 ответа

Попробуй это:

$('input:checkbox:not(:checked)').each(function(){
    $('label[for=' + $(this).attr('id') + ']').add(this).fadeTo('slow',0.45);
});

(странно, только один ярлык выбран)

И как .attr("name") на самом деле работает, когда выбрано более одного элемента (возвращает массив, составной список или... что?).

призвание .attr() для набора элементов возвращает только значение атрибута для первого элемента. Так что в вашем случае метка для первого флажка выбрана.

Вы всегда можете создать кучу селекторных строк динамически, используя цикл, но это не очень эффективно. Если ваши метки и флажки имеют предсказуемую HTML-структуру, вы можете использовать ее в своих интересах вместо этого с помощью методов обхода jQuery.

// Selector for checkboxes not checked
var checkboxes = $('input:checkbox:not(:checked)'), 
    selector = [];

checkboxes.each(function(){
  selector.push('[for="' + $(this).attr('id') + '"]');
});

// Selector for labels relative to checkboxes not checked
var labels = $('label:' + selector.join());

Я думаю, этого должно быть достаточно.

Другие вопросы по тегам