当我想通过索引从同一类型的多个节点中选取某个节点时,有以下几种方法:
some_table_node.find("tr:nth-child(3)").find("td:nth-child(5)")
some_table_node.all("tr")[2].all("td")[4]
哪种方式更好?你能提供你偏好的论据吗?
答案 0 :(得分:2)
接受的答案实际上并不是很大的区别,因为all
可以通过传递其中一个计数选项来等待。两者之间的真正区别在于all
(和first
)的结果无法自动重新加载。这意味着如果您存储一个元素,然后在页面上替换元素后尝试使用它,您将收到一个过时的节点错误。如果使用find
,它将尝试重新查询查找并重新加载匹配的元素。较小的好处是find
调用涉及较少的数据传输,因此速度稍快。
另请注意,您的查询并不总是相同。如果你的表中有一个tr,后跟t多个t,那么all
查询将返回tbody的第二行,而find
将返回tbody的第三行< / p>
<table id="some_table">
<thead>
<tr>
<th>...</th>
</tr>
</thead>
<tbody>
<tr>...</tr>
<tr>...</tr> <= some_table_node.all('tr')[2] will return this
<tr>...</tr> <= some_table_node.find('tr:nth-child(3)') will return this
<tr>...</tr>
</tbody>
</table>
答案 1 :(得分:1)
find
等待,all
没有。通常这意味着find
不那么脆弱(并且更优秀)。您还应该能够将前者简化为:
some_table_node.find("tr:nth-child(3) td:nth-child(5)")