我有一个有两个子节点的节点:HTML文本和HTML元素。
<h1 id="Installation-blahblah">Installation on server<a href="#Installation-blah" class="wiki-anchor">¶</a>
</h1>
在这种情况下,HTML文本为:
Installation on server
和HTML元素:
<a href="#Installation-blah" class="wiki-anchor">anchor;</a>
然后我创建一个这样的节点:
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)
现在,要将上述节点添加到主节点,我使用以下内容:
node.add_child(span_node)
这会将span节点追加到末尾。如何将span_node
放在所有孩子面前?
答案 0 :(得分:15)
感谢Pesto提供几乎正确的解决方案。
工作解决方案是:
node.children.first.add_previous_sibling(span_node)
答案 1 :(得分:8)
您可以像这样使用NodeSet#before
:
node.children.before(span_node)
NodeSet#before
是一种将项目作为第一个元素插入的快捷方法。更通用的解决方案是使用Node#before
和Node#after
。例如,some_node.before foo
会将节点foo
直接添加为some_node
之前的兄弟节点。 Node#after
类似。请注意:
node.children.first.before(span_node)
因此等同于上述解决方案。
答案 2 :(得分:8)
if (!angular.equals(document.getElementById("filesUploadId"), null)) {
$scope.$watch(function() {
var myFiles = document.getElementById("filesUploadId");
return myFiles;
},
function(newValue, oldValue) {
$( "#fileNameId" ).val(function(){
var result = null;
$(myFiles).each(function(){
result = name + this.attr(files).attr(name);
});
return result;
});
});
}