0

我的页面很长,我已经提取了与我的问题相关的 tr 和 td。

<tr>
<td colspan="2"><a href="javascript:__doPostBack('ctl00$ContentPlaceHolder1$AddControl1$dv$ctl01','')">Save</a>&nbsp;<a href="javascript:__doPostBack('ctl00$ContentPlaceHolder1$AddControl1$dv','Cancel$-1')">Back</a></td>
</tr>
<tr>
.............
.............
</tr>
<tr>
<td colspan="2"><a href="javascript:__doPostBack('ctl00$ContentPlaceHolder1$AddControl1$dv$ctl08','')">Save</a>&nbsp;<a href="javascript:__doPostBack('ctl00$ContentPlaceHolder1$AddControl1$dv','Cancel$-1')">Back</a></td>
</tr>
table#ctl00_ContentPlaceHolder1_.DetailsView tbody tr td a

给我 4 个匹配的元素

如何仅选择具有的元素"Save"

我尝试过这样的事情:

table#ctl00_ContentPlaceHolder1_.DetailsView tbody tr td a:contains('Save')

不工作

4

3 回答 3

2

:contains伪选择器不属于任何级别的 CSS 选择器标准。因此,它不被 支持By.cssSelector,所以你不能使用 vanilla CSS 选择器来做到这一点。您确实可以尝试其他一些选择。

  • 您可以遍历返回的元素findElements,获取每个元素的文本,并在找到所需的元素时跳出循环。
  • 您可以使用 XPath 代替 CSS 选择器。
  • 您可以创建自己的By使用 Sizzle JavaScript CSS 选择器引擎(通常被错误地称为“jQuery CSS 选择器引擎”)的类的子类来使用 Sizzle 引擎来查找您的元素,因为 Sizzle 实现了非标准的伪选择器。
于 2012-12-10T23:08:05.047 回答
0

我已经使用您提供的内容构建了一个小型测试,并填写了我认为您提供的内容之外的内容,并且它正在工作。

<html>
<head>
  <link href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/themes/base/jquery-    ui.css" rel="stylesheet" type="text/css"/>
  <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.5/jquery.min.js"></script>
  <script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/jquery-ui.min.js">           
  </script>
  <script>

    $(document).ready(function() {
      $("#contentTable.tableClass tbody tr td a:contains('Save')").css("border", "2px     dotted blue");

    });
  </script>
</head>
<body style="font-size:62.5%;">

<table id="contentTable" class="tableClass">

  <tbody>
    <tr>
      <td colspan="2"><a href="javascript:__doPostBack('ctl00$ContentPlaceHolder1$AddControl1$dv$ctl01','')">Save</a>&nbsp;<a    href="javascript:__doPostBack('ctl00$ContentPlaceHolder1$AddControl1$dv','Cancel$-1')">Back    </a>
      </td>
    </tr>
    <tr>
      <td colspan="2"><a href="javascript:__doPostBack('ctl00$ContentPlaceHolder1$AddControl1$dv$ctl08','')">Save</a>&nbsp;<a href="javascript:__doPostBack('ctl00$ContentPlaceHolder1$AddControl1$dv','Cancel$-1')">Back     </a>
      </td>
    </tr>
  </tbody>

</table>

</body>
</html>

我已经简化了您的表 id 和类值,但除此之外我认为您的选择器应该可以工作。一旦你选择了这些元素,你想对它们做什么?

于 2012-12-10T22:45:26.260 回答
0

如果它们始终是您的代码的第一个元素,那么您可以使用:first-child

table#ctl00_ContentPlaceHolder1_.DetailsView tbody tr td a:first-child

xpath方式将是

table#ctl00_ContentPlaceHolder1_.DetailsView tbody tr td a[text()='Save']

否则如基于元素文本的 CSS 选择器所述?没有 CSS 方法可以根据其文本定位元素..

于 2012-12-11T00:41:47.220 回答