Javascript 为什么.parentNode返回';未定义';在';这';指针?

Javascript 为什么.parentNode返回';未定义';在';这';指针?,javascript,function,this,Javascript,Function,This,我已经建立了一个自定义主页,链接到一些书签,如谷歌或维基百科 链接设置为a元素,其中包含特定站点的href。在a元素中,我使用class=“clickArea”和onmouseover=“overClickArea('page-description')”放置了一个div,它在其他一些div中显示了一个简短的描述(很好) 此外,它还应该将我自己的自定义搜索栏(站点内)的内容设置为父a标记的href属性的值。搜索栏是一个输入元素 为了获得href值,我在这个指针上使用parentNode和getA

我已经建立了一个自定义主页,链接到一些书签,如谷歌或维基百科

链接设置为
a
元素,其中包含特定站点的
href
。在
a
元素中,我使用
class=“clickArea”
onmouseover=“overClickArea('page-description')”
放置了一个
div
,它在其他一些
div
中显示了一个简短的描述(很好)

此外,它还应该将我自己的自定义搜索栏(站点内)的内容设置为父
a
标记的
href
属性的值。搜索栏是一个
输入
元素

为了获得
href
值,我在
这个
指针上使用
parentNode
getAttribute('href')
parentNode
函数返回
undefined

我知道
这个
指针指向函数作为方法的元素。
我试图用
div
替换
this
,并将
this
作为函数参数传递,但未成功

我很高兴完成这项工作,非常感谢您的帮助:)

其中一个链接:

<a href="http://de.wikipedia.org/wiki/Wikipedia:Hauptseite">
    <div class="clickArea" onmouseover="overClickArea('Wikipedia - The Free Encyclopedia')">
       <img class="icon" src="Icon_Wikipedia.png" alt="Wikipedia" />
       <br>Wikipedia
    </div>
</a>

您可以这样调用
overClickArea

onmouseover="overClickArea('page-description')"
由于尚未指定上下文,因此将在默认对象的上下文中调用它。在浏览器中,即
窗口

您似乎假设它将是
onmouseover
属性附加到的元素。事实并非如此

window
没有
parentNode
属性(至少在默认情况下是这样)


在事件处理程序函数本身(即
onmouseover=“this”
)中,
this
将是该元素。

您可以这样调用
overClickArea

onmouseover="overClickArea('page-description')"
由于尚未指定上下文,因此将在默认对象的上下文中调用它。在浏览器中,即
窗口

您似乎假设它将是
onmouseover
属性附加到的元素。事实并非如此

window
没有
parentNode
属性(至少在默认情况下是这样)


在事件处理程序函数本身(即
onmouseover=“this”
)中,
this
将是该元素。

this
引用窗口对象,因此它没有父节点。改变它

 <div class="clickArea" onmouseover="overClickArea(this,'Wikipedia - The Free Encyclopedia')">

引用窗口对象,因此它没有父节点。改变它

 <div class="clickArea" onmouseover="overClickArea(this,'Wikipedia - The Free Encyclopedia')">

要扩展Quentins Answer,访问元素,而不是在函数(引用函数本身)中使用
this
,您需要
事件.target
,这最好从鼠标悬停处理程序传入

onmouseover="overClickArea(event,'Wikipedia - The Free Encyclopedia')"
然后,在你的函数中接受它,你就可以得到你想要的结果

function overClickArea(event,descStr){

   event = event || window.event;
   var url = event.target.parentNode.getAttribute('href');
    ....

要扩展Quentins Answer,访问元素,而不是在函数(引用函数本身)中使用
this
,您需要
事件.target
,这最好从鼠标悬停处理程序传入

onmouseover="overClickArea(event,'Wikipedia - The Free Encyclopedia')"
然后,在你的函数中接受它,你就可以得到你想要的结果

function overClickArea(event,descStr){

   event = event || window.event;
   var url = event.target.parentNode.getAttribute('href');
    ....

如果在处理程序属性中传递
event
,实际上不需要
event=event | | window.event
。旧IE创建的函数没有定义
事件
参数,因此它会从全局范围中自然地选择
窗口.event
。但是,您需要
(event.target | | event.srcelment).parentNode.get…
,尽管
目标似乎不是OP想要的。这一点很好@cookiemonster-旧习惯!我考虑删除这个anser,因为从处理程序中传递
这个
更好/更短-但是这样看也没有坏处(我想)谢谢。啊,刚刚在event.src元素上发现了你的观点,是的,这是必要的,我错过了一些东西。谢谢。是的,
event=event | | window.event是无害的。我只是想提一下。:-)如果在处理程序属性中传递
event
,实际上不需要
event=event | | window.event
。旧IE创建的函数没有定义
事件
参数,因此它会从全局范围中自然地选择
窗口.event
。但是,您需要
(event.target | | event.srcelment).parentNode.get…
,尽管
目标似乎不是OP想要的。这一点很好@cookiemonster-旧习惯!我考虑删除这个anser,因为从处理程序中传递
这个
更好/更短-但是这样看也没有坏处(我想)谢谢。啊,刚刚在event.src元素上发现了你的观点,是的,这是必要的,我错过了一些东西。谢谢。是的,
event=event | | window.event是无害的。我只是想提一下。:-)