DOM bir öğeyi değiştirmek için arıyorum.
Örneğin, bunun yerine <a>
değiştirmek istediğim bir öğe var <span>
.
Bunu nasıl yapabilirim?
DOM bir öğeyi değiştirmek için arıyorum.
Örneğin, bunun yerine <a>
değiştirmek istediğim bir öğe var <span>
.
Bunu nasıl yapabilirim?
Yanıtlar:
replaceChild () kullanarak :
<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, değiştirilen A öğesidir.
A.replaceWith(span)
- Ebeveyn gerekmezGenel form:
target.replaceWith(element);
Önceki yönteme göre çok daha iyi / temiz.
Kullanım durumunuz için:
A.replaceWith(span);
Desteklenen Tarayıcılar - 94% Nis 2020
Bu soru çok eski, ama kendimi bir Microsoft Sertifikasyonu için çalışırken buldum ve çalışma kitabında kullanılması önerildi:
oldElement.replaceNode(newElement)
Ben baktı ve sadece IE destekleniyor gibi görünüyor. Doh ..
Ben sadece burada komik bir yan not olarak eklemek olacağını düşündüm;)
Benzer bir sorun vardı ve bu konu bulundu. Değiştir benim için işe yaramadı ve ebeveyn tarafından gitmek benim durumum için zordu. Inner Html çocukları da değiştirdi. OuterHTML kullanmak işi tamamladı. Umarım bu başka birine yardımcı olur!
currEl = <div>hello</div>
newElem = <span>Goodbye</span>
currEl.outerHTML = newElem
# currEl = <span>Goodbye</span>
Kullanarak bir Düğümü değiştirebilirsiniz Node.replaceWith(newNode)
.
Bu örnek, tüm öznitelikleri ve alt öğeleri başlangıç düğümünden korumalıdır:
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)
})
Zaten önerilen seçenekler göz önüne alındığında, bir ebeveyn bulmadan en kolay çözüm:
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);
bunu yapmanın modern (ES5 +) yolu