exactly.
In svg you can only append elements to containers which, for virtually every element, are the root svg element, or g elements.
This is a big difference with protovis for instance.
you'd want to position your nodes with transform - translate, like so:
var nodes=tBubble.enter()
.append("g").attr("transform", function(d) { return "translate("+(d.id + cxOffset)+","+cyOffest+")"; })
then you can add your circles and texts directly on top without worrying about positioning any more.
nodes
.append("circle")
.attr("r", 0)
.transition()
.attr("r", function(d) { return getBubbleSize(d.size); } );
nodes
.append("text")
.attr("r", 0)
.attr("text-anchor", "middle")
.text(function(d) { return d.name; } ); BTW, you don't need to type "svg:text" in full with the current versions of d3.