如何在具有不同类的任何元素上替换文档中出现的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属性进行替换,但这感觉很笨拙。
答案 0 :(得分:0)
默想:
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(/\bfoo\b/, '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>