0

如何在函数中识别它是否已被锚标签 href 调用?

在这种情况下,事件为空。所以 event.target 和 event.srcElement 不起作用。

代码

HTML

<a href="SomeFunction();">Href works here</a>

JavaScript

   function SomeFunction ()
   {
      // I need to get the anchor element that invoked this function
   }
4

3 回答 3

2

关于什么

<a href="SomeFunction(this);">Href works here</a>

function SomeFunction(context) {

    var callingElement = context;

}
于 2009-06-16T04:56:15.240 回答
1

按照@alex 的建议,您能否添加一个脚本以在页面加载中运行以将hrefs 更改为您想要的(添加“this”引用)?

以以下脚本为例,这将更改 id 设置为 SomeID 或 class 设置为 SomeClass 的锚标记的 href 值:

function changeLinks() {
    var all_links = document.getElementsByTagName("a");
    for (var i=0; i<all_links.length; i++){
        if (all_links[i].id == 'SomeID' || all_links[i].className == 'SomeClass') {
            all_links[i].href = 'SomeFunction(this);';
        }
    }
}

希望这可以帮助...

编辑:根据您的评论,您可以尝试以下操作:

var clickedAnchor = null;

function setClickedAnchor(obj) {
    clickedAnchor = obj;
}
function changeLinks() {
    var all_links = document.getElementsByTagName("a");
    for (var i=0; i<all_links.length; i++){
        if (all_links[i].id == 'SomeID' || all_links[i].className == 'SomeClass') {
            all_links[i].href = 'setClickedAnchor(this);' + all_links[i].href;
        }
    }
}
于 2009-06-16T05:56:39.750 回答
0

据我所知,只有两种方法可以使用标准 Javascript 来实现这一点。第一种方法已经概述了——将节点作为参数传递给函数。另一种方法是处理onclick锚的事件。这与以前的方法非常相似,因为它要求您修改标记以将参数传递给函数。为此,您需要将标记更改为以下内容:

<a href="#" onclick="SomeFunction(event)">Href works here</a>

function SomeFunction(event) {
    var node = event.srcElement;
}

上面的代码会将事件对象传递给函数,该函数将为您提供有关该事件的各种有趣信息。

如果您无法更改发送到浏览器的标记,您可能需要考虑使用 JQuery 或其他 AJAX 库之类的东西在运行时搜索和修改节点的事件处理程序。在标记到达浏览器之前对其进行修改显然是首选,但有时您别无选择。

最后,如果您无法更改标记并且不想在运行时修改 DOM,您始终可以查看可用的 Javascript 引擎特定功能。例如,您可能能够arguments.caller在那些支持它的引擎中使用。我并不是说它会起作用,但您可能想看看有什么可用的。

于 2009-06-16T05:44:43.690 回答