我的标记中有这样的表格:
<table class="wowClassTable">
<tbody>
<tr>
<td>Race</td>
<td>Faction</td>
<td>Link</td>
</tr>
<tr>
<td>Human</td>
<td>Alliance</td>
<td><a href="http://www.wowwiki.com/Human_(playable)">View</a></td>
</tr>
<tr>
<td>Dwarf</td>
<td>Alliance</td>
<td><a href="http://www.wowwiki.com/Dwarf_(playable)">View</a></td>
</tr>
<tr>
<td>Night Elf</td>
<td>Alliance</td>
<td><a href="http://www.wowwiki.com/Night_elf_(playable)">View</a></td>
</tr>
</tbody>
</table>
我想要做的是迭代表,返回以下数组:
[["Race", "Faction", "Link"], ["Human", "Alliance", "View"], ["Dwarf", "Alliance", "View"], ["Night Elf", "Alliance", "View"]]
但是我希望数组的第三个元素具有&#34; View&#34;文本替换为实际链接。所以首先迭代表并获取数组我做了这个:
race_table_array = Array.new
rows.each do |row|
race_array = Array.new
row.cells.each do |cell|
race_array << cell.text
end
race_table_array << race_array
end
puts race_table_array.inspect
这让我得到阵列。所以我试着替换文本,在这里我不知所措。我知道我需要引用单元格中的link元素。所以我将上面的row.cells迭代器更改为:
row.cells.each do |cell|
if cell.a(text: 'View').exists?
race_array << cell.a(:href)
else
race_array << cell.text
end
end
我的想法是,我会引用嵌套的&#39; a&#39;单元格内的(链接)元素(这是一个TableCell对象)。我会通过文字&#39;查看&#39;找到该元素。有了这个,我就会使用href。这给了一个工作的印象,但正在取代我的整个阵列,所以我最终得到这个:
[["Race", "Faction", "Link"], "http://www.wowwiki.com/Human_(playable)", "http://www.wowwiki.com/Dwarf_(playable)", "http://www.wowwiki.com/Night_elf_(playable)"]]
如果猜测这与我如何检查该单元格是否有名为&#39; View&#39;的链接有关。但我现在还不确定如何纠正这个问题。
答案 0 :(得分:2)
就个人而言,我将采用更多功能方法并稍微清理一下代码。
rows.map do |row|
row.cells.map do |cell|
cell.a(text: 'View').exists? ? cell.a(text: 'View').href : cell.text
end
end
希望我帮助过。
答案 1 :(得分:0)
好的,所以我有一个答案,它似乎是一个非常非常不优雅的答案。
这是我最终做的事情:
rows.each do |row|
race_array = Array.new
row.cells.each do |cell|
if cell.a(text: 'View').exists?
race_array << cell.a(text: 'View').href
else
race_array << cell.text
end
end
race_table_array << race_array
end
不同之处在于(而不是像我原来那样):
race_array << cell.a(:href)
我这样做:
race_array << cell.a(text: 'View').href
这样做是为了得到以下内容:
[["Race", "Faction", "Link"], ["Human", "Alliance", "http://www.wowwiki.com/Human_(playable)"], ["Dwarf", "Alliance", "http://www.wowwiki.com/Dwarf_(playable)"], ["Night Elf", "Alliance", "http://www.wowwiki.com/Night_elf_(playable)"]]
对我来说很好看!我不知道这是否是最好的方法,但它似乎确实有效。