加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby – Nokogiri相当于jQuery nearest()方法,用于在树中查找第

发布时间:2020-12-17 04:28:47 所属栏目:百科 来源:网络整理
导读:jQuery有一个可爱的,有点错误的名为 closest()的方法,它在DOM树中寻找匹配的元素.例如,如果我有这个HTML: table src="foo" tr tdYay/td /tr/table 假设元素设置为 td,那么我可以像这样计算src的值: element.closest('table')['src'] 如果缺少表元素或其src
jQuery有一个可爱的,有点错误的名为 closest()的方法,它在DOM树中寻找匹配的元素.例如,如果我有这个HTML:
<table src="foo">
  <tr>
    <td>Yay</td>
  </tr>
</table>

假设元素设置为< td>,那么我可以像这样计算src的值:

element.closest('table')['src']

如果缺少表元素或其src属性,那将彻底返回“undefined”.

在Javascriptland习惯了这个,我很想在Rubyland中找到与Nokogiri相同的东西,但是我能够想出的最接近的是使用ancestors()这个明显不优雅的黑客攻击:

ancestors = element.ancestors('table')
src = ancestors.any? ? first['src'] : nil

需要三元组,因为如果在空数组上调用,则返回nil.好主意?

解决方法

你可以先调用一个空数组,问题是它会返回nil并且你不能说nil [‘src’]而不会感到悲伤.你可以这样做:
src = (element.ancestors('table').first || { })['src']

如果你在Rails中,你可以尝试使用:

src = element.ancestors('table').first.try(:fetch,'src')

如果你做了很多这样的事情,那么在方法中隐藏丑陋:

def closest_attr_from(e,selector,attr)
  a = e.closest(selector)
  a ? a[attr] : nil
end

然后

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读