我正在寻找下表的CSS选择器:

Peter    | male    | 34
Susanne  | female  | 12

是否有任何选择器来匹配所有包含“男性”的td ?


当前回答

所有这些都是很好的答案,但我认为我可以添加一些在实际场景中对我有用的东西:利用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;
}

从技术上讲,这与使用数据属性解决方案是一样的,但如果你不是网站的作者,这也适用于你,而且这不是一些专门为支持此用例而设计的过时解决方案;它本身是相当常见的。它的一个缺点是,实际上不能保证您想要的元素将具有此属性。

其他回答

恐怕这是不可能的,因为内容没有属性,也不能通过伪类访问。CSS3选择器的完整列表可以在CSS3规范中找到。

如果我没看错说明书的话,没有。

您可以在元素上匹配元素中属性的名称和元素中命名属性的值。但是,我没有看到任何用于匹配元素中的内容的东西。

由于CSS缺乏这一特性,您将不得不使用JavaScript按内容设置单元格样式。例如,XPath的包含:

var elms = document.evaluate( "//td[contains(., 'male')]", node, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null )

然后像这样使用结果:

for ( var i=0 ; i < elms.snapshotLength; i++ ){
   elms.snapshotItem(i).style.background = "pink";
}

https://jsfiddle.net/gaby_de_wilde/o7bka7Ls/9/

如果你使用的是Chimp / Webdriver。io,他们支持比CSS规范更多的CSS选择器。

例如,这将点击第一个包含“坏熊”字样的锚:

browser.click("a*=Bad Bear");

这里的大多数答案都试图提供如何编写HTML代码以包含更多数据的替代方案,因为至少到CSS3为止,您不能通过部分内部文本选择元素。但这是可以做到的,你只需要添加一点普通的JavaScript,注意因为female也包含了male,它会被选中:

细胞=文件 控制台日志(细胞); forEach[]。呼叫(细胞、功能) 如果(el.innerText.indexOf) ! - el。click ();点击或其他选择 控制台日志(el)。 的 }); < table > < tr > 彼得< td > < / td > < td >男< / td > 34 < / td > < td > < / tr > < tr > < td >苏珊< / td > < td >女性< / td > 14 < / td > < td > < / tr > - < table >

<table>
  <tr>
    <td data-content="Peter">Peter</td>
    <td data-content="male">male</td>
    <td data-content="34">34</td>
  </tr>
  <tr>
    <td data-conten="Susanne">Susanne</td>
    <td data-content="female">female</td>
    <td data-content="14">14</td>
  </tr>
</table>