Ruby nokogiri从“按类全选”中排除了元素

Ruby nokogiri从“按类全选”中排除了元素,ruby,nokogiri,Ruby,Nokogiri,我只是尝试从一个节点的所有子元素中按类排除几个子元素 page.css('div.parent > *').each do |child| if (child["class"].content != 'this' && child["class"].content != 'that') array.push(child.text.to_s) end end 我知道这不是写语法,但一直无法找到如何选择一个elements类,而不是按类选择和元素 该方法为您

我只是尝试从一个节点的所有子元素中按类排除几个子元素

page.css('div.parent > *').each do |child|
  if (child["class"].content != 'this' && child["class"].content != 'that')
    array.push(child.text.to_s)
  end
end 
我知道这不是写语法,但一直无法找到如何选择一个elements类,而不是按类选择和元素

该方法为您提供了
Nokogiri::XML::Element
实例,这些实例的大部分行为都来自其父类。要从节点中获取属性,请使用
[]

page.css('div.parent > *').each do |child|
  if(!%w{this that}.include?(child['class']))
    array.push(child.text.to_s)
  end
end
您还可以使用
if(child['class']!='this'&&child['class']!='that')
,如果这样对您更有意义的话

但是,
class
属性可以有多个值,因此您可能希望在空白处将它们拆分为多个部分:

exclude = %w{this that}
page.css('div.parent > *').each do |child|
  classes = (child['class'] || '').split(/\s+/)
  if((classes & exclude).length > 0)
    array.push(child.text.to_s)
  end
end

这只是一种简单的方法,可以查看这两个数组是否有任何相同的元素(即
包含任何要排除的元素)。

谢谢,这就是我想要的。您忘记在第二天关闭
if
line@Aaron:谢谢,添加了缺少的括号。啊,谢谢第二个块,它可能更健壮一些。