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

时间:2014-02-03 10:54:00

标签: javascript jquery html anchor href

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

<a href="javascript:handleEvent(this, 'abc')"></a>

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

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

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

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

4 个答案:

答案 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:;";
}

Live Copy | Live Source

这是相当顽皮的,因为它使用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);
}