使用Nokogiri替换所有出现的CSS类



如何用不同的类替换文档中任何元素上出现的CSS类的所有实例?

在任何元素上都可能存在其他类,在这种情况下,它们应该保持不变。

如果类名是"foo",我想用"bar"代替它,我实际上想从

<div class"foo">
 <span class="foo omega"></span>
 <span class="alpha foo omega"></span>
</div>

收件人:

<div class"bar">
 <span class="bar omega"></span>
 <span class="alpha bar omega"></span>
</div>

我知道我可以循环浏览所有元素并替换css属性,但这感觉很笨拙。

沉思:

require 'nokogiri'
doc = Nokogiri::HTML(<<EOT)
<div class"foo">
 <span class="foo omega"></span>
 <span class="alpha foo omega"></span>
</div>
EOT
foo_spans = doc.search('.foo') # => [#<Nokogiri::XML::Element:0x3fe532115b14 name="span" attributes=[#<Nokogiri::XML::Attr:0x3fe532115a60 name="class" value="foo omega">]>, #<Nokogiri::XML::Element:0x3fe532115380 name="span" attributes=[#<Nokogiri::XML::Attr:0x3fe5321152e0 name="class" value="alpha foo omega">]>]
foo_spans.each do |n|
  n['class'] = n['class'].gsub(/bfoob/, 'bar')
end
puts doc.to_html
# >> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
# >> <html><body>
# >> <div class>
# >>  <span class="bar omega"></span>
# >>  <span class="alpha bar omega"></span>
# >> </div>
# >> </body></html>

相关内容

  • 没有找到相关文章

最新更新