通过A列中包含的某些文本查找表的行,并在同一行中选择B列

时间:2014-07-28 16:59:23

标签: javascript phantomjs casperjs

我使用的是casperjs。当前页面上有一个表格,如下所示。我有字符串"Title of Row 2 which I like",我想在表格中搜索包含此字符串的行。

然后点击该行中的按钮,即Clicky button 2

<table>
    <!-- ...table header... -->
    <tr id="row1">
        <td>Row 1</td>
        <td>Title of Row 1</td>
        <td>
            <button ... onClick='some javascript function'>Clicky Button 1</button>
        </td>
    </tr>
    <tr id="row 2">
        <td>Row 2</td>
        <td>Title of Row 2 which I like</td>
        <td>
            <button ... onClick='some javascript function'>Clicky button 2</button>
        </td>
    </tr>
</table>

我的想法是:

  1. 我创建了一个正则表达式,在整个DOM中搜索"Title of Row 2 which I like"整行,以获得它所在行的id。然后用这个我组成了一个选择器,并找到该行下的按钮。我做到了这一点,没关系。
  2. 这就是我的想法。我只是想知道,是否有更多的 casper (或优雅)方式来做到这一点?我看了一些函数......似乎没有什么能够通过它的文本搜索某些东西。想到像getElementsAttribute()这样的东西可以得到我正在寻找的行id ......但是我找不到这行。

2 个答案:

答案 0 :(得分:1)

您可以使用XPath轻松实现此目的。 CasperJS提供XPath实用程序:

var x = require('casper').selectXPath;

所以你点击这样的按钮:

casper.click(x("//tr[contains(td, 'Title of Row 2 which I like')]//button"));

这假设每行只有一个按钮。如果按钮位于下一个td,那么您可以使用

casper.click(x("//tr/td[contains(., 'Title of Row 2 which I like')]/following-sibling::td[1]/button"));

答案 1 :(得分:0)

JQuery,如果你有,has a selector that searches for DOM nodes by their text。要匹配上面的示例,您可以使用

  

$(&#34; td:contains(&#39;我喜欢的第2行的标题&#39;)&#34;)

请注意,它区分大小写。