这就是网页的html结构:
<body>
<form>
<input type='file'/>
</form>
<div id='list'>
<div>value here<input id='delete' type='button'/></div>
</div>
</body>
我找到了点击“删除”按钮时触发的javascript代码,并删除了输入“文件”元素。它使用这段代码,其中元素是上面提到的输入'文件':
deleteButton.onclick=function(){this.parentNode.element.parentNode.removeChild(
this.parentNode.element );}
我想了解'this.parentNode.element'背后的逻辑(规则)?为什么不直接访问元素'element.parentNode.remove ...'
非常感谢答案 0 :(得分:1)
我想了解'this.parentNode.element'背后的逻辑(规则)?
Node
,Element
,HTMLElement
或HTMLDivElement
接口上没有element
属性。所以我的猜测就是那个代码中的其他地方,你会发现一些东西明确地将该属性添加到包含按钮的div
的元素实例中。您可以这样做,向元素实例添加任意属性。这些通常被称为“expando”属性,应该非常非常非常。
答案 1 :(得分:0)
不是问题的答案,只是意见。最好避免像
这样的结构this.parentNode.element.parentNode
因为如果你改变你的DOM结构,你需要重写你的JS。所以我认为最好给标签赋予id属性,并使用下一个构造来获取DOM元素:
的document.getElementById( 'element_id')
或者如果您将使用一些js框架(如jQuery),您可以使用更简单的构造来获取DOM元素
$( “#ement_id”)
答案 2 :(得分:0)
好的,“removeChild”是一种奇怪的方法,很可能是构思错误的。它应该看起来像:
<div>value here<input id='deleteMe' type='button'/></div>
var node = document.getElementById('deleteMe');
node.remove(); // <--- does not exist, but sure would be nice!!!
不,相反,我们必须做这些恶作剧:
var node = document.getElementById('deleteMe');
node.parentNode.removeChild(node); // verbose! Convoluted!
我们必须得到节点的父节点,调用方法,然后再次引用该节点。据我所知,这看起来不像任何其他DOM方法。好消息是你可以在一行中实现它,链接,就像一个jQuery方法。
最好重新开始或复制其他人的代码。使用“this”意味着它在一个对象(或类)中,引用该对象中的其他方法或属性。你现在应该坚持使用非对象变量和函数。
希望有所帮助。