我正在寻找下表的CSS选择器:
Peter | male | 34
Susanne | female | 12
是否有任何选择器来匹配所有包含“男性”的td ?
我正在寻找下表的CSS选择器:
Peter | male | 34
Susanne | female | 12
是否有任何选择器来匹配所有包含“男性”的td ?
当前回答
@voyager关于使用data-*属性的回答(例如data-gender=“女性|男性”是2017年最有效且符合标准的方法:
[data-gender='male'] {background-color: #000; color: #ccc;}
大多数目标都可以实现,因为有一些尽管有限的选择器面向文本。first-letter是一个伪元素,它可以对元素的第一个字母应用有限的样式。还有一个::first-line伪元素,除了明显地选择元素(如段落)的第一行之外,还意味着很明显可以使用CSS来扩展这种现有功能,以设置textNode的特定方面的样式。
在这种主张成功并实现之前,我能建议的下一个最好的事情是使用空格分隔符爆炸/分割单词,在span元素中输出每个单独的单词,然后如果单词/样式目标是可预测的,则结合使用:n个选择器:
$p = explode(' ',$words);
foreach ($p as $key1 => $value1)
{
echo '<span>'.$value1.'</span>;
}
否则如果无法预测,再次使用voyager关于使用data-*属性的答案。一个使用PHP的例子:
$p = explode(' ',$words);
foreach ($p as $key1 => $value1)
{
echo '<span data-word="'.$value1.'">'.$value1.'</span>;
}
其他回答
如果我没看错说明书的话,没有。
您可以在元素上匹配元素中属性的名称和元素中命名属性的值。但是,我没有看到任何用于匹配元素中的内容的东西。
你可以将内容设置为数据属性,然后使用属性选择器,如下所示:
/* Select every cell matching the word "male" */ td[data-content="male"] { color: red; } /* Select every cell starting on "p" case insensitive */ td[data-content^="p" i] { color: blue; } /* Select every cell containing "4" */ td[data-content*="4"] { color: green; } <table> <tr> <td data-content="Peter">Peter</td> <td data-content="male">male</td> <td data-content="34">34</td> </tr> <tr> <td data-content="Susanne">Susanne</td> <td data-content="female">female</td> <td data-content="14">14</td> </tr> </table>
你还可以使用jQuery轻松地设置数据内容属性:
$(function(){
$("td").each(function(){
var $this = $(this);
$this.attr("data-content", $this.text());
});
});
所有这些都是很好的答案,但我认为我可以添加一些在实际场景中对我有用的东西:利用CSS的aria-label属性。
对于那些不知道的读者:aria-label是一个属性,它与其他类似的属性一起使用,让屏幕阅读器知道什么是什么,以防有视力障碍的人在使用你的网站。许多网站将这些属性添加到包含图像或文本的元素中,作为“描述符”。
这使得它高度特定于网站,但如果你的元素包含这个,使用属性的内容选择该元素是相当简单的:
HTML:
<td aria-label="male">Male</td>
<td aria-label="female">Female</td>
CSS:
td[aria-label="male"] {
outline: 1px dotted green;
}
从技术上讲,这与使用数据属性解决方案是一样的,但如果你不是网站的作者,这也适用于你,而且这不是一些专门为支持此用例而设计的过时解决方案;它本身是相当常见的。它的一个缺点是,实际上不能保证您想要的元素将具有此属性。
我发现属性选项是你最好的选择,如果你不想使用javascript或jquery。
例如,在HTML中,用ready来样式所有的表格单元格:
<td status*="ready">Ready</td>
然后在css中:
td[status*="ready"] {
color: red;
}
看起来他们是在考虑CSS3规范,但它没有被削减。
:contains() CSS3选择器http://www.w3.org/TR/css3-selectors/#content-selectors