Man*_*uel 14 ruby xml dom nokogiri
我有一个有两个子节点的节点:HTML文本和HTML元素.
<h1 id="Installation-blahblah">Installation on server<a href="#Installation-blah" class="wiki-anchor">¶</a>
</h1>
Run Code Online (Sandbox Code Playgroud)
在这种情况下,HTML文本是:
Installation on server
Run Code Online (Sandbox Code Playgroud)
和HTML元素:
<a href="#Installation-blah" class="wiki-anchor">anchor;</a>
Run Code Online (Sandbox Code Playgroud)
然后我创建一个这样的节点:
span_node = Nokogiri::HTML::Node.new('span',doc)
span_node['class'] = 'edit-section'
link_node = Nokogiri::HTML::Node.new('a',doc)
link_node['href'] = "/wiki/#{page_id}/#{@page.title}/edit?section=#{section_index}"
link_node['class'] = 'icon icon-edit'
link_node.content = 'mylink'
span_node.add_child(link_node)
Run Code Online (Sandbox Code Playgroud)
现在,要将上述节点添加到主节点,我使用以下内容:
node.add_child(span_node)
Run Code Online (Sandbox Code Playgroud)
这会在末尾附加span节点.我怎样才能把span_node所有孩子都放在眼前?
Man*_*uel 15
感谢Pesto提供几乎正确的解决方案.
工作解决方案是:
node.children.first.add_previous_sibling(span_node)
Run Code Online (Sandbox Code Playgroud)
你可以NodeSet#before像这样使用:
node.children.before(span_node)
Run Code Online (Sandbox Code Playgroud)
NodeSet#before是一个将项目作为第一个元素插入的快捷方法.更通用的解决方案是使用Node#before和Node#after.例如,some_node.before foo将节点foo直接添加为兄弟节点some_node. Node#after类似.请注意:
node.children.first.before(span_node)
Run Code Online (Sandbox Code Playgroud)
因此等同于上述解决方案.
| 归档时间: |
|
| 查看次数: |
16569 次 |
| 最近记录: |