使用 jQuery 组合类选择器和属性选择器

Posted

技术标签:

【中文标题】使用 jQuery 组合类选择器和属性选择器【英文标题】:Combining a class selector and an attribute selector with jQuery 【发布时间】:2011-09-08 22:54:51 【问题描述】:

是否可以将类选择器属性选择器与jQuery结合起来?

例如,给定以下 html

<TABLE>
  <TR class="myclass" reference="12345"><TD>Row 1</TD></TR>
  <TR class="otherclass" reference="12345"><TD>Row 2</TD></TR>
  <TR class="myclass" reference="12345"><TD>Row 3</TD></TR>
  <TR class="myclass" reference="54321"><TD>Row 4</TD></TR>
</TABLE>

我可以使用什么选择器来仅选择第 1 行和第 3 行?

我试过了:

$(".myclass [reference=12345]") // returns nothing

$(".myclass, [reference=12345]") // returns all 4 rows (yes, I know the comma means 'or')

我确信答案很简单,我已经尝试搜索 jQuery 论坛和文档,但我似乎无法弄清楚这一点。有人可以帮忙吗?

【问题讨论】:

【参考方案1】:

将它们组合起来。从字面上组合它们; 将它们连接在一起,不要使用任何标点符号。

$('.myclass[reference="12345"]')

您的第一个选择器查找具有属性值的元素,包含在具有类的元素中。 该空间被解释为descendant selector。

正如您所说,您的第二个选择器查找具有属性值或类或两者的元素。 逗号被解释为multiple selector 运算符——不管这意味着什么(CSS 选择器没有“运算符”的概念;逗号可能更准确地称为分隔符)。

【讨论】:

我也可以合并 id 吗?我的意思是这样的:$('.myclass[myid="6"]')【参考方案2】:

我认为你只需要删除空间。即

$(".myclass[reference=12345]").css('border', '#000 solid 1px');

这里有一个小提琴http://jsfiddle.net/xXEHY/

【讨论】:

【参考方案3】:

此代码也有效:

$("input[reference=12345].myclass").css('border', '#000 solid 1px');

【讨论】:

【参考方案4】:

这也可以:

$(".myclass[reference='12345']").css('border', '#000 solid 1px');

【讨论】:

以上是关于使用 jQuery 组合类选择器和属性选择器的主要内容,如果未能解决你的问题,请参考以下文章

CSS3新增的哪些选择器和常见的属性是哪些?

web前端入门到实战:常见CSS3选择器和文本字体样式汇总

[ jquery 表单UI选择器和表单元素属性选择器 ] 表单UI选择器和表单元素属性选择器

如何通过类、id、选择器和属性获取 DOM 元素

jQuery 类选择器和 $(this)

JQuery——表单对象属性筛选选择器和特殊选择器this