Вы можете попытаться получить outerHTML
и заменить начальный и конечный теги.
var element = document.getElementById("element");
element.outerHTML = element.outerHTML.trim()
.replace('<strong ','<button ')
.replace('</strong>'.'</button');
Обратите внимание: , однако, приведенное выше решение применимо только для простых случаев использования.Для лучшего решения воспользуйтесь фрагментом ниже.
var element = document.getElementById("element");
changeNodeName(element,'button');
function changeNodeName(el,str){
var elNodeName = el.nodeName.toLowerCase();
var newString = el.outerHTML.trim()
.replace('<'+ elNodeName,'<'+str);
// To replace the end tag, we can't simply use replace()
// because, replace() will replace the first occurrence,
// which means if our element has a child element with the
// same node name the end tag of the *child element* will be
// replaced, not the parent element. So,
newString = newString
.slice(0,newString.lastIndexOf('</'+str+'>'));
//now newString = "<button id='element'>Text"
newString = newString + "</" + str + ">";
el.outerHTML = newString;
}
<strong id="element">
<strong>
Text
</strong>
</strong>