我正在寻找下表的CSS选择器:
Peter | male | 34
Susanne | female | 12
是否有任何选择器来匹配所有包含“男性”的td ?
我正在寻找下表的CSS选择器:
Peter | male | 34
Susanne | female | 12
是否有任何选择器来匹配所有包含“男性”的td ?
当前回答
我同意数据属性(旅行者的答案)是它应该如何处理的,但是,CSS规则如下:
td.male { color: blue; }
td.female { color: pink; }
通常可以更容易地设置,特别是使用像angularjs这样的客户端库,它可以简单到:
<td class="{{person.gender}}">
只要确保内容只有一个词!或者你甚至可以映射到不同的CSS类名:
<td ng-class="{'masculine': person.isMale(), 'feminine': person.isFemale()}">
为了完整起见,下面是数据属性方法:
<td data-gender="{{person.gender}}">
其他回答
使用jQuery:
$('td:contains("male")')
恐怕这是不可能的,因为内容没有属性,也不能通过伪类访问。CSS3选择器的完整列表可以在CSS3规范中找到。
你必须添加一个名为data-gender的数据属性,带一个男性或女性值,并使用属性选择器:
HTML:
<td data-gender="male">...</td>
CSS:
td[data-gender="male"] { ... }
如果你使用的是Chimp / Webdriver。io,他们支持比CSS规范更多的CSS选择器。
例如,这将点击第一个包含“坏熊”字样的锚:
browser.click("a*=Bad Bear");
@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>;
}