2016-07-19 6 views
0

文書内で発生するCSSクラスのインスタンスを別のクラスのすべての要素に置き換えるにはどうすればよいですか?Nokogiriを使用してCSSクラスをすべて置き換える

要素のいずれかに他のクラスがある場合は、そのまま残す必要があります。

クラス名は 'FOO' だったと私は 'バー' と交換したい場合は、私は効果的に私から行きたい:へ

<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> 

私が知っているIすべての要素をループして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> 
関連する問題