我能从Javascript方法中找出谁\哪个DOM元素调用了我吗? ... 函数foo(){ //我想知道打电话给我的人的财产。 //类似这样的内容。caller.href?? }

我能从Javascript方法中找出谁\哪个DOM元素调用了我吗? ... 函数foo(){ //我想知道打电话给我的人的财产。 //类似这样的内容。caller.href?? },javascript,dom,Javascript,Dom,我想我可以分配所有元素ID,然后将我自己的ID传递给我正在调用的JS方法,但我一直在寻找更好的方法。传递一个参数怎么样 <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

我想我可以分配所有元素ID,然后将我自己的ID传递给我正在调用的JS方法,但我一直在寻找更好的方法。

传递一个参数怎么样

<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>

那么您的JavaScript将是:

函数foo(ob){ alert(ob.href);//或任何您希望发生的事情,最好传递一个id }
如果要将对象本身传递给函数,请使用“this”选择器。

调用函数时,可以将
href
属性的值传递给函数:

foo(id);

当浏览器作为DOM事件的结果调用函数时,JavaScript会向该函数传递一个包含事件信息的对象。但它在IE中的工作方式与其他浏览器略有不同。要在所有浏览器中工作,
foo()
应该使用参数*(我使用
e
):

函数foo(e){ var sender=(e&&e.target)| |(window.event&&window.event.src元素); //sender是已单击的DOM元素 警报(sender.href);//假定单击的元素是 } 第一行将为“sender”指定在所有浏览器中引发事件的元素的值

现在,如果您的
包含子元素(例如,图像),并且其中一个是单击的实际元素,那么该元素将成为“发送者”。如果有这种可能性,您需要从发件人处进入DOM,直到找到您的链接:

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>
}
函数foo(e){ var sender=(e&&e.target)| |(window.event&&window.event.src元素); //sender是已单击的DOM元素 髓鞘变异=发送者; //找到父节点,直到找到 while(myEle.tagName.toUpperCase()!='A'){ myEle=myEle.parentNode; } //迈尔现在是发起者,发起者仍然是发起者。 警报(myEle.href); }
*您还可以使用
arguments[]
数组访问传递给函数的任何参数,即使它们没有声明。

您不需要将元素作为参数传递给函数。你可以用

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);
}

这里的约定是,它引用处理程序调用的DOM元素。 因此,如果您想知道链接的href:

var a = event.srcElement;
alert(a.href);
这应该能奏效

编辑: 如果在DOM中显式地从onclick处理程序调用foo,即

function foo () {
   // Inside foo this will refer to the DOM element if called as an event handler
   var href = this.href
}

那么这个的原始上下文将在foo中丢失。要解决此问题,可以将函数调用绑定到原始上下文:

<a [...] onclick="foo()">


这种方法不是跨浏览器的。我自己有时候喜欢在无聊的事情上做小动作。。。var sender=(window.event&&window.event.srcement)| | e.target@cresentfresh onclick在语义上是不正确的,并且极不灵活。请参阅渐进增强技术。
<a [...] onclick="foo()">
<a [...] onclick="foo.call(this)">