Nokogiri从select all by class中排除了元素



我只是想从一个节点的所有子元素的选择中排除几个子类元素

page.css('div.parent > *').each do |child|
  if (child["class"].content != 'this' && child["class"].content != 'that')
    array.push(child.text.to_s)
  end
end 

我知道这不是写语法,但一直无法找到如何选择一个元素类,而不是通过类选择元素

css方法为您提供Nokogiri::XML::Element实例,这些实例从它们的Nokogiri::XML::Node父类获得大部分行为。要从节点获取属性,使用[]:

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

交集只是一种简单的方法来查看两个数组是否有任何共同的元素(即classes包含任何您想要排除的元素)。

相关内容

  • 没有找到相关文章

最新更新