我在html中有一个锚标记元素,如:
<a href="javascript:handleEvent(this, 'abc')"></a>
现在在javascript函数中,我写了:
function handleEvent(sourceElement, txt) {
console.log(sourceElement);
}
在这种情况下,安慰元素将作为窗口出现。 我尝试了sourceElement.document.activeElement,但它似乎不适用于chrome,它将作为body元素出现。
我无法将锚标记的结构更改为“onClick”函数,因为这来自其他一些来源。 有没有办法在这种情况下找到调用元素?
答案 0 :(得分:4)
这里真正的答案是更改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
。< / p>
答案 1 :(得分:1)
如果你有权访问js,你可以这样做:
document.addEventListener('DOMContentLoaded', function(){
var link = document.querySelectorAll('a');
link[0].addEventListener('click', function(e){
console.log(e.target);
});
});
有了这个,你就不会对内联href
事件做任何事情而只是附加你自己的处理程序。
答案 2 :(得分:1)
尝试这样的事情,使用jQuery
只需使用选择器
选择链接标记即可 $(function(){
var href = $('a').attr('href');
href = href.replace('javascript:','');
$('a').attr('href','#');
$('a').attr('onclick',href);
})
这只是解决方法。
答案 3 :(得分:1)
如果此处没有其他答案,因为,您无法在加载后更新DOM(如果要修改{{,请尝试执行任何操作) 3}} - 不是说它不可能,而是......),这是一个开箱即用的想法:
有时候a href
会有一些暗示。所以你可以使用它。
<div class="hint current">
<a href="javascript:handleEvent('.hint')">
就我而言,我甚至不需要参数即可知道提示,这使事情变得更简单:
function handleEvent (hint) {
if(!hint) {
hint = $("div.current");
}
hrefElement = $(hint).find('a[href^=javascript]');
}
如果您的DOM经常被无法访问的脚本更改,这当然会有意义。
但即使a href
上没有任何暗示,你仍然可以这样做:
<a href="javascript:var x=1;handleEvent(1)">
function handleEvent (uniqueId) {
hrefElement = $('a[href^=javascript:var x='+uniqueId);
}