您可以致电first
在空数组上,问题是它将返回nil
你不能说nil['src']
没有悲伤。你可以这样做:
src = (element.ancestors('table').first || { })['src']
如果你在 Rails 中,你可以使用try
thusly:
src = element.ancestors('table').first.try(:fetch, 'src')
如果你经常做这种事情,那么将丑陋的地方隐藏在一个方法中:
def closest_attr_from(e, selector, attr)
a = e.closest(selector)
a ? a[attr] : nil
end
and then
src = closest_attr_from(element, 'table', 'src')
您也可以将其直接修补到 Nokogiri::XML::Node (但我不推荐它):
class Nokogiri::XML::Node
def closest(selector)
ancestors(selector).first
end
def closest_attr(selector, attr)
a = closest(selector)
a ? a[attr] : nil
end
end