在调用href时标识锚标记

时间:2009-06-16 04:38:15

标签: javascript javascript-events

如何在函数中识别它是否已被锚标记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
   }

3 个答案:

答案 0 :(得分:2)

怎么样?
<a href="SomeFunction(this);">Href works here</a>

function SomeFunction(context) {

    var callingElement = context;

}

答案 1 :(得分:1)

按照@alex的建议,您是否可以添加一个脚本以在页面加载中运行以将href更改为您想要的(添加'this'参考)?

以下面的脚本为例,这将更改id设置为SomeID或类设置为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;
        }
    }
}

答案 2 :(得分: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。我不是说它会起作用,但你可能想看看有什么可用。