替换节点名称

Ada*_*dam 2 javascript replace nodename

是否可以替换节点名称?喜欢:

HTML:

<strong id="element">Text</strong>
Run Code Online (Sandbox Code Playgroud)

使用Javascript:

var element = document.getElementById("element");
    element.nodeName = "b";
Run Code Online (Sandbox Code Playgroud)

我认为它不起作用,如果以这种方式不可能,那怎么办呢?

为什么我需要它:

我正在构建一个文本编辑器,IE在execCommand()函数中使用强而不是b,我想改变它,我试图从头开始构建execCommand("粗体"),但是存在很多问题,即使在IE 8和9之间存在差异.所以现在我决定更改它的节点名称,它会非常简单,但不起作用.. :(

注意:我需要它才能在Internet Explorer中工作.

谢谢

T.J*_*der 6

不,但您可以轻松替换节点:

var oldNode = document.getElementById('element'),
    newNode = document.createElement('b'),
    node,
    nextNode;

node = oldNode.firstChild;
while (node) {
    nextNode = node.nextSibling;
    newNode.appendChild(node);
    node = nextNode;
}

newNode.className = oldNode.className;
// Do attributes too if you need to
newNode.id = oldNode.id; // (Not invalid, they're not both in the tree at the same time)
oldNode.parentNode.replaceChild(newNode, oldNode);
Run Code Online (Sandbox Code Playgroud)

实例

非常感谢Haochi指出replaceChild,我做到了这一点:

oldNode.parentNode.insertBefore(newNode, oldNode);
oldNode.parentNode.removeChild(oldNode);
Run Code Online (Sandbox Code Playgroud)

实例 ......但replaceChild更清洁.

文档: