CSSクラスが要素上だけで、別の属性である:1つ以上のクラスがすでによ存在する可能性がある場合、あなたがわからない場合はCSSクラス以来
doc.search('a').each do |anchor|
anchor.inner_text = "hello!"
anchor['class']="whatever"
end
は、スペースで区切られた属性であります属性に対して返さ=
を使用してだけではなく、文字列を変異
あなたが明示的に属性を設定する必要が
anchor['class'] ||= ""
anchor['class'] = anchor['class'] << " whatever"
ようなものが必要。これは、たとえば、DOMを変更しません。
anchor['class'] ||= ""
anchor['class'] << " whatever"
それが行われているより多くの仕事につながるにもかかわらず、私はおそらくそうのようにこれを行うだろう:
class Nokogiri::XML::Node
def add_css_class(*classes)
existing = (self['class'] || "").split(/\s+/)
self['class'] = existing.concat(classes).uniq.join(" ")
end
end
したくない場合クラスを猿パッチに、あなたは、代わりにできます。
module ClassMutator
def add_css_class(*classes)
existing = (self['class'] || "").split(/\s+/)
self['class'] = existing.concat(classes).uniq.join(" ")
end
end
anchor.extend ClassMutator
anchor.add_css_class "whatever"
編集:あなたは、これは鋸山がのために内部的に何をするか、基本的であることがわかりますあなたがソースを表示するために、クラスをクリックして見つけ方法:あなたが見つけた
# File lib/nokogiri/xml/node_set.rb, line 136
def add_class name
each do |el|
next unless el.respond_to? :get_attribute
classes = el.get_attribute('class').to_s.split(" ")
el.set_attribute('class', classes.push(name).uniq.join(" "))
end
self
end
bigup the ClassMutator!ありがとうございました! – flunder