Nokogiri,从页面中获取所有 类

Nokogiri, fetch all classes from page

如何从 html 页面获取所有 类 的数组?

我正在尝试这样

page = Nokogiri::HTML.parse(html)
page.classes
=> []

#classes returns 仅 类 节点本身。它不处理子节点。您需要递归扫描所有子节点。

require 'nokogiri'

def flatten_dom(node)
  node.elements.flat_map { |child| flatten(child) } << node
end

page = Nokogiri::HTML.parse('<html><body class="a b"><b class="c">x</b></body></html>')

flatten(page).flat_map(&:classes)
# => ["c", "a", "b"]

您可能还想添加 .uniq 以删除重复项。

以下是我如何使用 Nokogiri 获取页面的所有 类:

def classes(element)
  (
    element.attr('class').to_s.split +
    element.children.map { |c| classes(c) }
  ).flatten.compact
end

page = Nokogiri::HTML(File.read('a.html'))

classes(page)

# => ["max-w-md", "my-4", "p-4", "mx-auto", "bg-gray-200", "bg-gray-300", "rounded", "mb-4", "block", "no-underline", "overflow-hidden", "flex", "w-20", "h-32", "bg-cover", "bg-no-repeat", "bg-center", "overflow-hidden", "font-bold", "px-4", "pt-2", "underline", "truncate", "px-4", "truncate", "text-sm", "px-4", "truncate", "text-sm", "px-4", "truncate", "text-sm", "text-gray-600", "px-4", "truncate", "text-sm", "rounded-full", "w-5", "mr-1", "inline-block", ...]