如何在href javascript函数中获取调用元素?

我在html中有一个锚标记元素,如:

 

现在在javascript函数中,我写了:

 function handleEvent(sourceElement, txt) { console.log(sourceElement); } 

在这种情况下,安慰元素将成为窗口。 我尝试了sourceElement.document.activeElement,但它似乎不适用于chrome,它将作为body元素出现。

我不能将锚标记的结构更改为’onClick’函数,因为这来自其他来源。 有没有办法在这种情况下找到调用元素?

这里真正的答案是改变HTML,你说你做不到。 如果可以的话,我会继续努力。 如果您正在编写函数,并且函数名称在HTML中,那么如何更改HTML?

但如果你真的,真的不能,你可以在加载后更新DOM:

 var list = document.querySelectorAll('a[href^="javascript:"]'); var x, link; for (x = 0; x < list.length; ++x) { link = list[x]; link.onclick = new Function(link.href.substring(11)); link.href = "javascript:;"; } 

实时复制 | 直播来源

这是相当顽皮的,因为它使用Function构造函数(非常类似于eval ),但如果您信任HTML的来源,那应该没问题。

或者当然,如果您不必使用href任何内容,只需在上面的代码中挂接您的事件处理程序,不要使用new Function

尝试这样的东西,使用jQuery

只需使用选择器选择链接标记即可

  $(function(){ var href = $('a').attr('href'); href = href.replace('javascript:',''); $('a').attr('href','#'); $('a').attr('onclick',href); }) 

这只是解决方法。

如果你有权访问js,你可以这样做:

 document.addEventListener('DOMContentLoaded', function(){ var link = document.querySelectorAll('a'); link[0].addEventListener('click', function(e){ console.log(e.target); }); }); 

有了这个,你就不会对内联href事件做任何事情而只是附加你自己的处理程序。

如果这里没有其他答案对你有用, 因为你加载后无法更新DOM(如果你想修改方形灯箱,请尝试做任何一个 – 不要说这是不可能的,但是……),这里有一个盒子思考:

有时会有一些暗示a href所在的东西。 所以你可以使用它。

 

在我的情况下,我甚至不需要参数就知道了提示,这使得事情变得更简单:

 function handleEvent (hint) { if(!hint) { hint = $("div.current"); } hrefElement = $(hint).find('a[href^=javascript]'); } 

如果你的DOM经常被你无法访问的脚本改变,那么这当然是有意义的。

但即使没有任何关于a href暗示,你仍然可以做这样的事情:

  function handleEvent (uniqueId) { hrefElement = $('a[href^=javascript:var x='+uniqueId); }