如何使用Javascript替换DOM元素?

omg*_*omg 150 javascript dom

我期待替换DOM中的元素.
例如,有一个<a>我想用替换替换的元素<span>.

我该怎么做呢?

Bjo*_*orn 195

通过使用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>
Run Code Online (Sandbox Code Playgroud)

  • 如果它是root html元素怎么办? (8认同)
  • 这个例子不起作用.您应该将脚本块放在正文的末尾以使其工作.此外,只是为了好玩:尝试在操作后添加[alert(myAnchor.innerHTML)]行. (7认同)

Kam*_*rey 63

var a = A.parentNode.replaceChild(document.createElement("span"), A);
Run Code Online (Sandbox Code Playgroud)

a是被替换的A元素.

  • @Bjorn Tipling 的回答实际上不起作用。这是 KooiInc 的(正确!)答案,也是正确的,评论。现在可以了!;-) 发送给两者! (2认同)
  • 当然,您可能想出了一个不是A哈哈的变量名 (2认同)

Gib*_*olt 50

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

通用形式:

target.replaceWith(element);
Run Code Online (Sandbox Code Playgroud)

比以前的方法更好/更清洁.

对于您的用例:

A.replaceWith(span);
Run Code Online (Sandbox Code Playgroud)

Mozilla文档

支持的浏览器 - 86%2018年11月

  • IE11或Edge 14不支持(现在:2016-11-16). (13认同)
  • @jor我有点同意支持尽可能多的浏览器,但我拒绝重新编写我的代码只是因为IE或Edge不完整或只是"想要与众不同".有标准,如果他们不遵循它们并且一些人支持它,这是他们的问题,不必影响我们作为Web开发人员. (5认同)
  • 我认为如果选择在我试图支持的所有浏览器上使用的代码之间,或者重新使用整个构建过程来使用Closure,我会选择使用适用于我试图支持的所有浏览器的代码. (4认同)
  • 尝试使用Google的Closure或其他转换器转换为ES5.如果您有更好,更易维护的选项,则不应该基于浏览器支持编写旧代码 (3认同)
  • 截至 2017 年 10 月,全球支持率为 72%,美国为 80% (3认同)

Zel*_*iax 7

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

oldElement.replaceNode(newElement)
Run Code Online (Sandbox Code Playgroud)

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

我想我应该把它添加在这里作为一个有趣的旁注;)