Я шукаю замінити елемент у DOM.
Наприклад, є <a>
елемент, який я хочу замість <span>
цього замінити .
Як би я пішов і зробив це?
Я шукаю замінити елемент у DOM.
Наприклад, є <a>
елемент, який я хочу замість <span>
цього замінити .
Як би я пішов і зробив це?
Відповіді:
використовуючи substituChild () :
<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 - замінений елемент A.
A.replaceWith(span)
- Батьків не потрібноРодова форма:
target.replaceWith(element);
Шлях краще / чистіше, ніж попередній метод.
Для вашого випадку використання:
A.replaceWith(span);
Підтримувані браузери - 94% квітня 2020 року
Це питання дуже старе, але я опинився, що навчався на сертифікацію Microsoft, і в навчальній книзі було запропоновано використовувати:
oldElement.replaceNode(newElement)
Я подивився на це і, здається, підтримується лише в IE. Дох ..
Я думав, що просто додам його сюди як смішну сторону;
У мене був подібний випуск і знайшов цю тему. Заміна не працювала для мене, а поїздка до батьків була складною для моєї ситуації. Внутрішня Html замінила дітей, чого я теж не хотів. За допомогою зовнішньої HTMLML було виконано завдання. Сподіваюсь, це допомагає комусь іншому!
currEl = <div>hello</div>
newElem = <span>Goodbye</span>
currEl.outerHTML = newElem
# currEl = <span>Goodbye</span>
Ви можете замінити вузол з допомогою Node.replaceWith(newNode)
.
Цей приклад повинен зберігати всі атрибути та дочірні сигнали від початкового вузла:
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)
})
З огляду на вже запропоновані варіанти, найпростіше рішення без пошуку батьків:
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);
це сучасний (ES5 +) спосіб зробити це