【问题标题】:How exactly is [att~=val] different from [att*=val] in CSS Attribute Selectors?CSS 属性选择器中的 [att~=val] 与 [att*=val] 究竟有何不同?
【发布时间】:2012-05-04 13:18:04
【问题描述】:
也许我遗漏了一些东西,但它们看起来很相似。例如,如果您使用...
a[alt~="thumb"]
或者...
a[alt*="thumb"]
我可以将选择范围缩小到不同的范围内吗?我的理解是 ~ 在引号中为您提供部分匹配,而 * 为您提供部分匹配。我将稍微修改一下代码,但由于我在此处找不到有关该主题的问题,因此认为无论哪种方式都会成为一个很好的主题。
【问题讨论】:
标签:
html
css
css-selectors
【解决方案1】:
来自 JQuery 帮助(支持标准选择器):
a[alt~="thumb"]
描述:选择具有指定属性的元素
包含给定单词的值,由空格分隔。这个选择器
将测试字符串与属性值中的每个单词匹配,
其中“单词”定义为由空格分隔的字符串。这
如果测试字符串完全等于任何一个,则选择器匹配
单词。
a[alt*="thumb"]
描述:选择具有指定属性的元素
包含给定子字符串的值。这是最慷慨的
与值匹配的 jQuery 属性选择器。它会
如果选择器的字符串出现在
元素的属性值。将此选择器与 Attribute 进行比较
包含单词选择器(例如 [attr~="word"]),它更多
在许多情况下都适用。
基本上,选择器~= 仅在找到被空白包围的值时才匹配。选择器*= 匹配如果在任何地方找到值。
<div alt='heading navigation'>
<div alt='head'>
div[alt~='head'] 将仅匹配第二个 div,但 div[alt*='head'] 将匹配两者。
【解决方案2】:
[att~=value] 是一个包含单词的选择器。
所以[alt="foo"] 选择器将匹配<a alt="foo bar">,但不会匹配<a alt="foobar">。
[alt*="foo"] 将同时匹配两者,因为这不会区分单词或其他内容。只要它在值中,它就会命中。