我对JS中的parentNode感到困惑。这是我的代码。
<table border="1" width="50%" id="table">
<tr>
<th>id</th>
<th>name</th>
<th>del</th>
</tr>
<tr>
<td>001</td>
<td>Kevin</td>
<td><a href="javascript:;" onclick="del(this);">del</a></td>
</tr>
和JS代码:
function del(obj){
var tr = obj.parentNode.parentNode;
tr.parentNode.removeChild(tr)
}
代码有效,我认为obj
引用<a>
代码,obj.parentNode
引用<td>
代码,obj.parentNode.parentNode
代表<tbody>
代码tr.parentNode.removeChild(tr)
标签。因此<tr>
表示删除function del(obj){
var tr = obj.parentNode.parentNode.parentNode;
tr.removeChild(tr)
}
标记。我是对的吗?
问题是如果我改变这样的代码。它不起作用。
main_fun_solution <- function(arg_A, arg_B) {
eval(substitute(main_fun(fun_A(arg_A),fun_B(arg_B), times = 3), list("arg_A" = arg_A, "arg_B" = arg_B)))
}
main_fun_solution(1,2)
答案 0 :(得分:1)
原因
tr
不起作用是因为tr
不是tr.parentNode.removeChild(tr)
的孩子,即本身。但是,tr
有效,因为tr.parentNode
显然是{{1}}的孩子。
答案 1 :(得分:1)
removeChild将在调用该函数的节点中查找节点。换句话说,tr.removeChild正在寻找tr里面的tr 。试试这个:
var tr = obj.parentNode.parentNode;
var trParent = tr.parentNode;
trParent.removeChild(tr);
答案 2 :(得分:-1)
的回答我不得不处理同样的问题,答案令人困惑 反直觉。嗯,它有其逻辑,但导致非平凡 的行为。
基本上,当从DOM树中删除节点时,它会触发模糊 事件(以及焦点事件之前)。
因此,当您调用removeChild时,会再次触发blur事件,但是这样 时间链接仍然定义了其parentNode,但链接不在其中 父母的孩子了! (是的,请阅读两次。或者更多。)