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代码>是无害的。我只是想提一下。:-)