错误:无法读取未定义的属性'replaceChild'

时间:2017-02-16 20:37:12

标签: javascript dom

我正在尝试更新表格以在保存记录时显示新行。我的代码目前再次加载整个表以及现有表。例如,我看到第1-15行,然后我添加一行,在同一个表中看到31行,1-15行,然后是1-16行。

这是我的替换函数的代码,它在更换数据时调用我的原始加载函数。我基于我看到的另一个例子。

function replaceData() {
    var old_tbody = document.getElementsByTagName('tbody');
    var new_tbody = document.createElement('tbody');
    loadData(new_tbody);
    old_tbody.parentNode.replaceChild(new_tbody,old_tbody);

    console.log("Data replaced");
}

我显然不是JavaScript专家,所以任何帮助都会受到赞赏。

2 个答案:

答案 0 :(得分:1)

getElementsByTagName函数返回一个HTML Collection(类似数组的对象),这意味着你必须指定你想要的那个数组项(即使只有一个项)。

所以你的代码应该是:

var old_tbody = document.getElementsByTagName('tbody')[0];

或者您可以使用仅返回第一个匹配元素的querySelector。像这样:

var old_tbody = document.querySelector('tbody');

答案 1 :(得分:0)

getElementsByTagName实际上会返回元素集合,因此 parentNode  不起作用。要获取实际的DOM节点,您将执行以下操作。

var old_tbody = document.getElementsByTagName('tbody')[0];