当属性包含在属性列表中时,jQuery选择元素?

时间:2011-07-22 00:12:30

标签: jquery jquery-selectors checkbox label jquery-attributes

更好地解释一个例子(我对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 个答案:

答案 0 :(得分:1)

试试这个:

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

答案 1 :(得分:0)

  

(奇怪的是,只选择了一个标签)

  

并且,当选择了多个元素时,.attr("name")如何实际工作(返回一个数组,一个连接列表,或者......什么?)。

在一组元素上调用.attr()仅返回第一个元素的属性值。因此,在您的情况下,第一个复选框的标签被选中。

你总是可以通过循环动态地创建一堆选择器字符串,但这不是很有效。如果你的标签和复选框是可预测的HTML结构,你可以使用jQuery的traversing methods来利用它。

答案 2 :(得分:0)

// 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());

我想这应该足够了。