如何用不同的类替换文档中任何元素上出现的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>