如何使用 Javascript 替换 DOM 元素?

IT技术 javascript dom
2021-02-09 21:33:56

我正在寻找替换 DOM 中的元素。
例如,<a>我想用 a 替换一个元素<span>

我将如何去做呢?

6个回答

通过使用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>
这个例子不起作用。您应该将脚本块放在正文的末尾以使其工作。此外,只是为了好玩:尝试在操作后添加行 [alert(myAnchor.innerHTML)]。
2021-03-11 21:33:56
锚点innerText中的StackOverflow存在拼写错误
2021-04-01 21:33:56
如果它是根 html 元素怎么办
2021-04-06 21:33:56
谢谢@Bjorn Tipling。我创建了一个关于如何向替换元素添加 id 和函数的后续问题,在这里:stackoverflow.com/questions/15670261/...
2021-04-09 21:33:56

A.replaceWith(span) - 不需要父母

通用形式:

target.replaceWith(element)

比以前的方法更好/更干净。

对于您的用例:

A.replaceWith(span)

高级用法

  1. 您可以传递多个值(或使用扩展运算符...)。
  2. 任何字符串值都将作为文本元素添加。

例子:

// Initially [child1, target, child3]

target.replaceWith(span, "foo")     // [child1, span, "foo", child3]

const list = ["bar", span]
target.replaceWith(...list, "fizz")  // [child1, "bar", span, "fizz", child3]

安全处理null目标

如果您的目标有机会为空,您可以考虑使用 newish?. 可选链运算符。如果目标不存在,则什么都不会发生。在这里阅读更多

target?.replaceWith?.(element)

相关的 DOM 方法

  1. 阅读更多-child.beforechild.after
  2. 阅读更多-parent.prependparent.append

Mozilla 文档

支持的浏览器- 95% 21 年 10 月

截至 2017 年 10 月,全球支持率为 72%,美国为 80%
2021-03-15 21:33:56
我认为如果选择是使用适用于我尝试支持的所有浏览器的代码,还是重新调整整个构建过程以使用 Closure,我会选择使用适用于我尝试支持的所有浏览器的代码.
2021-03-28 21:33:56
@jor 我有点同意支持尽可能多的浏览器,但我拒绝重新编写我的代码,因为 IE 或 Edge 不完整或只是“想要与众不同”。有一些标准,如果他们不遵循它们并且有一些人支持它,那就是他们的问题,这不必影响我们作为 Web 开发人员。
2021-03-28 21:33:56
不支持 IE11 或 Edge 14(现在:2016-11-16)。
2021-04-07 21:33:56
尝试使用 Google 的 Closure 或其他转译器转换为 ES5。如果您有更好、更易于维护的选项,您不应该基于浏览器支持编写旧代码
2021-04-09 21:33:56
var a = A.parentNode.replaceChild(document.createElement("span"), A);

a 是被替换的 A 元素。

@Bjorn Tipling 的回答实际上是行不通的。这是 KooiInc 的(正确!)答案,也正确,评论。现在它起作用了!;-) 两者都发送!
2021-03-30 21:33:56
你当然可以想出一个不是 A 的变量名,哈哈
2021-03-31 21:33:56

这个问题很老了,但我发现自己正在学习微软认证,并且在学习书中建议使用:

oldElement.replaceNode(newElement)

我查了一下,好像只支持IE。哦..

我想我只是将它添加到这里作为一个有趣的旁注;)

我有一个类似的问题,并找到了这个线程。Replace 对我不起作用,而且对我的情况来说,去父母身边很困难。内部 Html 替换了孩子,这也不是我想要的。使用outerHTML 完成了工作。希望这对其他人有帮助!

currEl = <div>hello</div>
newElem = <span>Goodbye</span>
currEl.outerHTML = newElem
# currEl = <span>Goodbye</span>
可能它在全球范围内使用,我认为答案是最好的!
2021-03-18 21:33:56
这很聪明,但我不知道它是否符合标准。谢谢 !
2021-03-30 21:33:56