添加/更改/删除HTML很简单:
require 'nokogiri'
doc = Nokogiri::HTML::DocumentFragment.parse('<div class="input">hello</div>')
div = doc.at('div')
div << '<span>Hello</span>'
puts doc.to_html
结果是:
# >> <div class="input">hello<span>Hello</span>
# >> </div>
注意,上面的代码将一个新节点附加到
<div>
因为
<<
,这意味着它们是附加的
之后
包含“hello”的文本节点。
如果要覆盖子级,可以使用
children =
:
div.children = '<span>Hello</span>'
puts doc.to_html
结果是:
# >> <div class="input"><span>Hello</span></div>
children =
可以采用一个节点,该节点下可以有多个其他节点,或者插入的节点的HTML文本。就是这样
node_or_tags
意思是当你看到它时
the documentation
.
也就是说,改变只是一个嵌入的
<label>
,我会这样做:
doc = Nokogiri::HTML::DocumentFragment.parse('<div class="input"><label>hello</label></div>')
label = doc.at('div label')
label.name = 'span' if label
puts doc.to_html
# >> <div class="input"><span>hello</span></div>
或:
doc = Nokogiri::HTML::DocumentFragment.parse('<div class="input"><label>hello</label></div>')
label = doc.at('div label')
label.replace("<span>#{ label.text }</span>") if label
puts doc.to_html
# >> <div class="input"><span>hello</span></div>
Nokogiri使您在指向标记后很容易更改标记的名称
<span>
通过替换
#{ label.text }
无论你想要什么。
at('div label')
是查找特定节点的一种方法。它的基本意思是“在第一个div中找到第一个标签标记”。
at
意思是找到某物的第一个,类似于使用
search(...).first
。CSS和XPath等价于两者
在
和
search
在
Nokogiri::XML::Node documentation
如果你需要的话。