Я ищу заменить элемент в DOM.
Например, есть <a>
элемент, который я хочу заменить <span>
вместо.
Как бы я пошел и сделал это?
Я ищу заменить элемент в DOM.
Например, есть <a>
элемент, который я хочу заменить <span>
вместо.
Как бы я пошел и сделал это?
Ответы:
с помощью 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.replaceWith(span)
- Родитель не нуженРодовая форма:
target.replaceWith(element);
Путь лучше / чище, чем предыдущий метод.
Для вашего случая использования:
A.replaceWith(span);
Поддерживаемые браузеры - 94% апрель 2020
Этот вопрос очень старый, но я обнаружил, что готовлюсь к сертификации Microsoft, и в учебнике было предложено использовать:
oldElement.replaceNode(newElement)
Я посмотрел его, и кажется, что он поддерживается только в IE. Doh ..
Я думал, что просто добавлю это здесь как забавную заметку;)
У меня была похожая проблема, и я нашел эту тему. Заменить не сработало для меня, и для меня было тяжело идти к родителю. Внутренний HTML заменил детей, что было не тем, чего я хотел. Использование outerHTML сделало свою работу. Надеюсь, это поможет кому-то еще!
currEl = <div>hello</div>
newElem = <span>Goodbye</span>
currEl.outerHTML = newElem
# currEl = <span>Goodbye</span>
Вы можете заменить HTML Element
или Node
использовать 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)
})
Если у вас есть эти элементы:
<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>
После выполнения вышеуказанных кодов вы получите следующие элементы:
<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>
Учитывая уже предложенные варианты, самое простое решение без поиска родителя:
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 +) способ сделать это