替换节点错误。要替换的节点不是此节点的子节点

时间:2014-02-07 12:01:50

标签: javascript html

我看不出我做错了什么。我得到了一堆选择列表(下拉列表)并希望用<span>替换它们,所以这是我的代码:

var selectListElements = document.getElementsByTagName('SELECT');

//select elements
for (var i = 0; i < selectListElements.length; i++) {
    var currentSelectList = selectListElements[i];

    //alert(selectListElements[i].name);
    if (currentSelectList.dontReplace != 'true') {
        var newNode  = document.createElement('SPAN');
        var nodeText = currentSelectList.options[currentSelectList.selectedIndex].value;
        var parentNode = currentSelectList.parentNode;
        parentNode.replaceChild(currentSelectList, newNode);
        i--;

        newNode.innerText           = nodeText;
        newNode.className           = 'tableBody';
        newNode.style.verticalAlign = 'top';
    }
}

但是这给了我错误:

  

Uncaught NotFoundError:无法在'Node'上执行'replaceChild':要替换的节点不是此节点的子节点。

我看不出那是怎么回事!我抓住了父母,所以一定是个孩子!

我做错了什么?

2 个答案:

答案 0 :(得分:11)

replaceChild中,新节点是第一个参数,而不是第二个参数。你让他们倒退了。

parentNode.replaceChild(newNode, currentSelectList);

另外,你为什么要i--?这不是创造一个无限循环吗?

答案 1 :(得分:4)

currentSelectList.replaceWith(newNode)

使用现代香草JS!比以前更好/更干净的方式。通用表格:

target.replaceWith(element);

developer.mozilla.org

Can I Use - 86%2018年11月