问题
What is the most recommended/efficient way to insert a node in the middle of a tree.
How to transpose this
<svg id="root" ... >
<g id="child1">...</g>
<text id="child2">...</text>
<rect id="child3">...</rect>
...
</svg>
to this
<svg id="root" ... >
<g id="parent">
<g id="child1">...</g>
<text id="child2">...</text>
<rect id="child3">...</rect>
...
</g>
</svg>
@jsFiddle
I have tried
var $parent = $("g").attr("id","parent");
var $root = $("#root");
$root.contents().each(function(){
$child=$(this);
$child.remove();
$parent.append($child);
});
$root.append($parent);
I have also tried using the moveTo method in this answer
(function($){
$.fn.moveTo = function(selector){
return this.each(function(){
var cl = $(this).clone();
$(cl).appendTo(selector);
$(this).remove();
});
};
})(jQuery);
$root.contents().each(function() {
$(this).moveTo($parent);
});
All of these methods work in simple scenarios but when the tree is really massive, the browser simply hangs, is there a more efficient way to perform this?
I am looking for a jQuery or pure javascript solution.
回答1:
I'd suggest:
$('#root > div').wrapAll('<div id="parent" />');
JS Fiddle demo.
References:
- wrapAll().
回答2:
This will make only one addition to the DOM, so this will be fast :
$('#root').html('<div id=parent>'+$('#root').html()+'</div>');
来源:https://stackoverflow.com/questions/12547194/inserting-a-g-node-in-the-middle-of-a-tree-svg-using-jquery