浏览节点

时间:2011-03-08 14:05:19

标签: javascript html dom

这就是网页的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 ...'

非常感谢

3 个答案:

答案 0 :(得分:1)

  

我想了解'this.parentNode.element'背后的逻辑(规则)?

NodeElementHTMLElementHTMLDivElement接口上没有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”意味着它在一个对象(或类)中,引用该对象中的其他方法或属性。你现在应该坚持使用非对象变量和函数。

希望有所帮助。