网站搜索

jquery - 如何在 href JavaScript 函数中获取调用元素?


我有一个锚点标签元素出现在 HTML 中,像这样:

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

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

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

在这种情况下,被控制的元素是窗口。我尝试了 sourceElement.document.activeElement,但在 Chrome 中似乎不起作用,它显示为 body 元素。

我无法将锚标签的结构更改为 'onClick' 函数,因为这是来自其他来源的。是否有办法在这种情况下找到调用的元素?

答案#1

这里的真正答案是修改 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。

答案#2

尝试像这样,使用 jQuery

只需使用你的选择器选择链接标签

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

这只是一个权宜之计。