2012-12-10 55 views
0

我有很长的页面,我已经提取了与我的问题相关的tr和td。匹配元素/包含使用CSSSelector

<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') 

不起作用

+0

你可以与我们分享表吗? –

+0

更新了我的问题 –

+0

'a:contains('Save')'应该可以工作。除非你在问题中没有包含其他内容。 –

回答

2

:contains假选择器不是CSS选择器标准的任何级别的一部分。因此,它不支持By.cssSelector,所以你不能使用香草CSS选择器。你可以尝试其他几个选项。

  • 您可以遍历findElements返回的元素,获取每个元素的文本,并在找到所需元素时跳出循环。
  • 您可以使用XPath而不是CSS选择器。
  • 您可以创建自己的By类的子类,该类使用Sizzle JavaScript CSS选择器引擎(通常错误地称为“jQuery CSS选择器引擎”)使用Sizzle引擎来查找元素,因为Sizzle实现了非标准psuedoselector。
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和类的值,但否则我认为你的选择器应该工作。一旦你选择了这些元素,你想要做什么?

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 selector based on element text?说没有CSS根据其文本的目标元素的方式..

相关问题