Je cherche à remplacer un élément dans le DOM. 
Par exemple, il y a un <a>élément que je souhaite remplacer par un <span>.
Comment pourrais-je y aller et faire ça?
Je cherche à remplacer un élément dans le DOM. 
Par exemple, il y a un <a>élément que je souhaite remplacer par un <span>.
Comment pourrais-je y aller et faire ça?
Réponses:
en utilisant replaceChild () :
<html>
<head>
</head>
<body>
  <div>
    <a id="myAnchor" href="http://www.stackoverflow.com">StackOverflow</a>
  </div>
<script type="text/JavaScript">
  var myAnchor = document.getElementById("myAnchor");
  var mySpan = document.createElement("span");
  mySpan.innerHTML = "replaced anchor!";
  myAnchor.parentNode.replaceChild(mySpan, myAnchor);
</script>
</body>
</html>
var a = A.parentNode.replaceChild(document.createElement("span"), A);a est l'élément A remplacé.
A.replaceWith(span) - Aucun parent nécessaireForme générique:
target.replaceWith(element);Bien mieux / plus propre que la méthode précédente.
Pour votre cas d'utilisation:
A.replaceWith(span);Navigateurs pris en charge - 94% avril 2020
Cette question est très ancienne, mais je me suis retrouvé à étudier pour une certification Microsoft, et dans le livre d'étude, il a été suggéré d'utiliser:
oldElement.replaceNode(newElement)Je l'ai recherché et il semble être uniquement pris en charge dans IE. Doh ..
Je pensais que je l'ajouterais juste ici comme une note amusante;)
J'ai eu un problème similaire et j'ai trouvé ce fil. Remplacer n'a pas fonctionné pour moi, et passer par le parent était difficile pour ma situation. Inner Html a remplacé les enfants, ce qui n'était pas non plus ce que je voulais. L'utilisation de externalHTML a fait le travail. J'espère que ceci aide quelqu'un d'autre!
currEl = <div>hello</div>
newElem = <span>Goodbye</span>
currEl.outerHTML = newElem
# currEl = <span>Goodbye</span>
Vous pouvez remplacer un HTML Elementou en Nodeutilisant Node.replaceWith(newNode).
Cet exemple doit conserver tous les attributs et fils du nœud d'origine:
const links = document.querySelectorAll('a')
links.forEach(link => {
  const replacement = document.createElement('span')
  
  // copy attributes
  for (let i = 0; i < link.attributes.length; i++) {
     const attr = link.attributes[i]
     replacement.setAttribute(attr.name, attr.value)
  }
  
  // copy content
  replacement.innerHTML = link.innerHTML
  
  // or you can use appendChild instead
  // link.childNodes.forEach(node => replacement.appendChild(node))
  link.replaceWith(replacement)
})
Si vous avez ces éléments:
<a href="#link-1">Link 1</a>
<a href="#link-2">Link 2</a>
<a href="#link-3">Link 3</a>
<a href="#link-4">Link 4</a>
Après avoir exécuté les codes ci-dessus, vous vous retrouverez avec ces éléments:
<span href="#link-1">Link 1</span>
<span href="#link-2">Link 2</span>
<span href="#link-3">Link 3</span>
<span href="#link-4">Link 4</span>
Compte tenu des options déjà proposées, la solution la plus simple sans trouver de parent:
var parent = document.createElement("div");
var child = parent.appendChild(document.createElement("a"));
var span = document.createElement("span");
// for IE
if("replaceNode" in child)
  child.replaceNode(span);
// for other browsers
if("replaceWith" in child)
  child.replaceWith(span);
console.log(parent.outerHTML);
target.replaceWith(element);est la façon moderne (ES5 +) de le faire