एक CSS वर्ग सिर्फ एक तत्व पर एक और विशेषता है:
doc.search('a').each do |anchor|
anchor.inner_text = "hello!"
anchor['class']="whatever"
end
सीएसएस वर्गों के बाद से, अंतरिक्ष-सीमांकित विशेषता में हैं यदि आप सुनिश्चित एक या अधिक वर्गों पहले से ही मौजूद हो सकता है अगर आप हूँ नहीं कर रहे हैं जैसे
anchor['class'] ||= ""
anchor['class'] = anchor['class'] << " whatever"
कुछ आप स्पष्ट रूप से करने के बजाय =
का उपयोग कर बस परिवर्तनशील स्ट्रिंग विशेषता के लिए लौट आए विशेषता निर्धारित करने की आवश्यकता की जरूरत है। यह, उदाहरण के लिए, डोम नहीं बदलेगा:
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"
संपादित: आप देख सकते हैं कि यह मूल रूप से क्या Nokogiriके लिए आंतरिक रूप से करता हैविधि आप स्रोत देखने के लिए वर्ग पर क्लिक करके पाया:
# 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
क्लासमुटर बड़ा! धन्यवाद! – flunder