Sto cercando di sostituire un elemento nel DOM.
Ad esempio, c'è un <a>elemento che voglio sostituire con un <span>invece.
Come andrei a farlo?
Sto cercando di sostituire un elemento nel DOM.
Ad esempio, c'è un <a>elemento che voglio sostituire con un <span>invece.
Come andrei a farlo?
Risposte:
usando 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 è l'elemento A sostituito.
A.replaceWith(span) - Nessun genitore necessarioForma generica:
target.replaceWith(element);
Molto meglio / più pulito del metodo precedente.
Per il tuo caso d'uso:
A.replaceWith(span);
Browser supportati - 94% aprile 2020
Questa domanda è molto antica, ma mi sono ritrovato a studiare per una certificazione Microsoft e nel libro di studio è stato suggerito di usare:
oldElement.replaceNode(newElement)
Ho cercato e sembra essere supportato solo in IE. Doh ..
Ho pensato di aggiungerlo qui come una nota a margine divertente;)
Ho avuto un problema simile e ho trovato questa discussione. Sostituire non ha funzionato per me, e andare dal genitore è stato difficile per la mia situazione. Inner HTML ha sostituito i bambini, che non era nemmeno quello che volevo. L'uso di outerHTML ha portato a termine il lavoro. Spero che questo aiuti qualcun altro!
currEl = <div>hello</div>
newElem = <span>Goodbye</span>
currEl.outerHTML = newElem
# currEl = <span>Goodbye</span>
È possibile sostituire un HTML Elemento NodeutilizzandoNode.replaceWith(newNode) .
Questo esempio dovrebbe mantenere tutti gli attributi e i figli dal nodo di 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)
})
Se hai questi elementi:
<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>
Dopo aver eseguito i codici sopra, finirai con questi elementi:
<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>
Date le opzioni già proposte la soluzione più semplice senza trovare un genitore:
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);è il modo moderno (ES5 +) per farlo