16 javascript dom
<a onclick ="foo()" href="bar.html" >Link </a>
<script>
...
function foo(){
//I want to know the href property of whoever called me.
//something like this.caller.href ??
}
</script>
Run Code Online (Sandbox Code Playgroud)
我想我可以只分配所有元素ID,然后将我自己的ID传递给我正在调用的JS方法,但我一直在寻找更好的方法.
Rex*_*x M 19
当浏览器调用函数作为DOM事件的结果时,JavaScript会将对象传递给该函数,该函数包含有关该事件的信息.但它在IE中的工作方式与其他方式略有不同.要在所有浏览器中工作,foo()应该采取参数*(我使用e):
function foo(e) {
var sender = (e && e.target) || (window.event && window.event.srcElement);
//sender is the DOM element which was clicked
alert(sender.href); //assumes the clicked element was an <a>
}
Run Code Online (Sandbox Code Playgroud)
第一行将为"sender"分配在所有浏览器中生成事件的元素的值.
现在,如果您<a> 包含子元素(例如,图像)和一个这些是实际点击的元素,那么该元素将成为"发件人".如果有可能,您需要从发件人处走DOM,直到找到您的链接:
function foo(e) {
var sender = (e && e.target) || (window.event && window.event.srcElement);
//sender is the DOM element which was clicked
var myEle = sender;
//find the parent node until we hit the <a>
while(myEle.tagName.toUpperCase() != 'A') {
myEle = myEle.parentNode;
}
//myEle is now the <a>. sender is still the originator.
alert(myEle.href);
}
Run Code Online (Sandbox Code Playgroud)
*通过使用arguments[]数组,您也可以访问传递给函数的任何参数,即使它们未被声明.
Jim*_*Jim 11
<a onclick="foo(this)" href="bar.html">Link</a>
Run Code Online (Sandbox Code Playgroud)
然后你的JavaScript将是:
function foo(ob) {
alert(ob.href); //or whatever you want to happen preferably pass an id
}
Run Code Online (Sandbox Code Playgroud)
如果要将对象本身传递给函数,请使用"this"选择器.