0

用一个例子更好地解释(我对 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);

这适用于复选框,但不适用于标签(奇怪的是,只有一个标签被选中)。

问题是:如何选择“附加”标签?And, how .attr("name")actually works when more than one element is selected (returns an array, a concatenated list, or... what?).

4

3 回答 3

1

尝试这个:

$('input:checkbox:not(:checked)').each(function(){
    $('label[for=' + $(this).attr('id') + ']').add(this).fadeTo('slow',0.45);
});
于 2011-07-22T00:32:43.353 回答
0

(奇怪的是,只有一个标签被选中)

And, how .attr("name")actually works when more than one element is selected (returns an array, a concatenated list, or... what?).

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

您总是可以通过循环动态创建一堆选择器字符串,但这不是很有效。如果您的标签和复选框处于可预测的 HTML 结构中,您可以利用 jQuery 的遍历方法来利用它。

于 2011-07-22T00:16:12.683 回答
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());

我想这应该足够了。

于 2011-07-22T00:22:08.757 回答