2009-05-09 16 views
120

Mam zamiar zastąpić element w DOM. Na przykład istnieje element "A", który chcę zastąpić słowem "SPAN".Jak zamienić element DOM w miejscu za pomocą JavaScript?

Jak mam to zrobić?

+3

'target.replaceWith (element);' jest nowoczesny (ES5 +) sposób to zrobić – Gibolt

+0

@Gibolt Co DOM spec mieć z ES? Co więcej, nie jest jeszcze częścią standardu DOM, a ES5 wydano 9 lat temu. – destoryer

Odpowiedz

167

stosując 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> 
+7

ten przykład nie działa. Powinieneś umieścić blok skryptu na końcu ciała, aby działał. Ponadto dla zabawy: spróbuj dodać linię [alert (myAnchor.innerHTML)] po operacji. – KooiInc

+0

To jest błąd w pisowni z StackOverflow w anchor innerText – rahul

+5

co jeśli jest to element html root – lisak

50
var a = A.parentNode.replaceChild(document.createElement("span"), A); 

A jest zastąpiona pierwiastek.

+0

Odpowiedź z @Bjorn Tipling w rzeczywistości nie działa. To jest (poprawna!) Odpowiedź dla KooiInc, również poprawna, komentarz. Teraz działa! ;-) Tx do obu! –

17

A.replaceWith (zakres)

ogólnej postaci:

target.replaceWith(element); 

Lepiej/czystsze od poprzedniego sposobu.

Dla Państwa przypadku użycia:

A.replaceWith(span); 
+10

Nieobsługiwane w IE11 lub Edge 14 (teraz: 2016-11-16). – jor

+2

Spróbuj użyć zamknięcia Google lub innego transpilera, aby przekonwertować na ES5. Nie powinieneś pisać starego kodu na podstawie obsługi przeglądarki, jeśli masz lepszą, łatwiejszą do utrzymania opcję. – Gibolt

+2

Całkowicie się zgadzam, ale IE11 i Edge 14 nie są stare ... – jor

Powiązane problemy