【问题标题】:jQuery select elements when attribute is contained in attribute list?属性列表中包含属性时jQuery选择元素?
【发布时间】:2011-10-10 16:35:57
【问题描述】:

用一个例子更好地解释一下(我对 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") 在选择多个元素时实际如何工作(返回一个数组、一个串联列表,或者......什么?)。

【问题讨论】:

  • 你的 HTML 是什么样的?
  • 你基本上可以淡化具有复选框和标签的容器。
  • @BoltClock:我使用 mvc 是因为我事先不知道视图应该如何适应套件客户的需求。所以 HTML 结构可以很容易地改变很多。

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


【解决方案1】:

试试这个:

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

【讨论】:

  • 好吧,我想就是这样。如果没有必要链接东西,不要链接东西:)
【解决方案2】:

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

,如何在选择多个元素时.attr("name")实际上工作(返回阵列,连接列表,或...)。

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

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

【讨论】:

  • 我不想依赖css选择器,也不知道三个中的元素会放在哪里……
【解决方案3】:
// 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());

我想这应该足够了。

【讨论】:

  • 根据文档,“选择器将测试字符串与属性值中的每个单词匹配,其中“单词”定义为由空格分隔的字符串。如果测试字符串完全匹配,则选择器匹配等于任何一个词。”并且 afaik 元素 ID 不能包含空格 :)
  • 你倒退了。在选择 <div class="foo bar"></div> 时,将 [class~="foo"] 视为 .foo 的等效项 - 空格位于 HTML 属性中,而不是选择器中。
  • 我猜你是对的,我真的去测试了:) 但是,我稍微修正了答案,这次它已经过测试并且可以工作了。
猜你喜欢
  • 1970-01-01
  • 2014-08-31
  • 2016-06-23
  • 1970-01-01
  • 2012-01-12
  • 2011-05-16
  • 2016-04-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多