It's because you are trying to concatenate an object with a string. Therefore, the object gets implicitly converted to it's string representation by it's toString function.
E.g.
var div = document.createElement('div');
'some string' + div.toString(); //"some string[object HTMLDivElement]"
'some string' + div; //"some string[object HTMLDivElement]"
If you want to concatenate the outerHTML of the element with some other HTML string that is possible however.
$('#shara').html(_name + ' ' + htmlElement.prop('outerHTML'));
However it's not necessary the most optimal or clean way when it's not necessary.
$('#shara').append($('<span>').addClass('name').text(_name).add(htmlElement));
As you may have noticed, I add the htmlElement to the set and perform a single append operation rather than chaining two append calls. That's to avoid multiple DOM reflows, which are quite expensive.
If you do not want the wrapping span and use the same solution, you can also do:
$('#shara').append($(document.createTextNode(_name + ' ')).add(htmlElement));