如何在函数中识别它是否已被锚标记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
}
答案 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
。我不是说它会起作用,但你可能想看看有什么可用。