【发布时间】:2015-07-07 20:06:25
【问题描述】:
我正在尝试从其中一门课程中重新创建一些实践。它即将从 UL 中删除一个 li-item 并将其附加到另一个 UL。
当我以以下方式编写代码时,所有工作都可以找到
var removeMeandAppendMe = function() {
var parentLi = this.parentNode;
var goneElement = incompleList.removeChild(parentLi);
compleList.appendChild(goneElement);
};
var li = incompleList.getElementsByTagName('li');
for (var i = 0; i < incompleList.children.length; i++) {
var link = li[i];
var liCheckArray = link.getElementsByTagName('input');
var liCheck = liCheckArray[0];
liCheck.onchange = removeMeandAppendMe;
}
当我将代码更改为以下代码时,我收到错误“无法在 'Node' 上执行 'removeChild':参数 1 不是 'Node' 类型”。
function removeMeandAppendMe(fromList, toList) {
var parentLi = this.parentNode;
var goneElement = fromList.removeChild(parentLi);
toList.appendChild(goneElement);
}
var li = incompleList.getElementsByTagName('li');
for (var i = 0; i < incompleList.children.length; i++) {
var link = li[i];
var liCheckArray = link.getElementsByTagName('input');
var liCheck = liCheckArray[0];
liCheck.onchange = removeMeandAppendMe(incompleList, compleList);
}
困扰我的是,当我的 removeMeandAppendMe 函数不带参数且不带参数时,代码运行良好。谁能告诉我为什么以及我的错误在哪里?谢谢。
(我知道这里讨论的模糊问题:Failed to execute 'removeChild' on 'Node')
【问题讨论】:
-
您可以创建一个fiddle 来显示您的问题吗?
-
什么是
incompleteList?分配在哪里? -
incompleteList和compleList是两个无序列表的id -
问题出在最后一行。您没有分配
removeMeandAppendMe,而是在调用它。我建议查看.bind()函数来实现您想要做的事情。