你如何确定用javascript点击的html?

时间:2008-10-18 11:03:32

标签: javascript

是否可以使用Javascript或其他技术来确定用户点击了哪个超链接,而无需更改超链接源代码。

例如: 您是否可以单击“标记”按钮,然后单击托管在不同iframe中的超链接,并能够计算用户单击的超链接,而无需更改该iframe中的任何源代码?

7 个答案:

答案 0 :(得分:4)

使用jQuery,您可以设置选择的上下文。即

$('a',$('#iframe-id'))。click(function(){...});

然后,您可以实现一个处理iFrame超链接点击的事件处理程序。处理程序中的“this”属性允许您查询超链接并获取诸如innerText等属性。

答案 1 :(得分:1)

你需要在每个链接上放一个事件, 然后您将获得有关特定点击的所有信息。

这只适用于某些文档, 因此,如果您尝试在iframe内的链接和页面中的链接之间进行测试,则不会获得iframe链接的事件。

为了附加您需要在页面中的所有链接上运行的所有链接的事件, 最好的方法是通过jQuery选择器。或其他js框架,如YUI

$(“a”)。click(function(){       警报('') });

getElementsByTagName(“a”) - 将为您提供页面中的所有链接。

答案 2 :(得分:0)

我只想到一个解决方案,这会有用,还是有其他选择?

解决方案是代理iframe soruce页面的内容,用代码替换href,调用一个javascript函数来识别点击了哪个href。

然后可以将其与标记点击结合使用以准确标记链接。

这也意味着原始来源,根本不需要改变。

答案 3 :(得分:0)

你需要什么? - )

如果你有一个iframe,你用作链接的目标,你必须做一些服务器端处理或添加一些东西到链接的URL,你可以在页面加载时读取...

但是检测页面加载的时间需要页面中的脚本,即iframe内部的脚本,或者需要在短时间间隔内测试iframe页面中元素可用性的函数...

- 但只有当页面来自与主页相同的域时才能成功,因为跨域脚本是非法的,因此是不可能的! -

答案 4 :(得分:0)

我认为这应该是可能的。可以从外部文档(嵌入iframe的页面)访问IFrame的内容,这样您就可以在iframe加载后在这些元素上添加事件处理程序(请参阅其他答案)。

另请参阅Wikipedia on Iframe,其中提供了一些实际上适用于IFrame内容的示例和框架。

答案 5 :(得分:0)

您可以将代码注入iframe,但仅当该iframe与您注入的网页位于同一个域时,出于明显的安全原因。

<iframe id="framedpage" src="framedpage.html"></iframe>
<button type="button" id="tagbutton">Tag</button>
<script type="text/javascript">
    function framedclicks_bind() {
        var f= document.getElementById('framedpage');
        var fdoc= f.contentDocument;
        if (!fdoc) fdoc= f.contentWindow.document; // for IE
        if (fdoc)
            for (var i= fdoc.links.length; i-->0;)
                fdoc.links[i].onclick= framedclicks_click; // bind to all links
    }
    function framedclicks_click() {
        alert('You clicked on '+this.href);
        return false; // don't follow link
    }
    document.getElementById('tagbutton').onclick= framedclicks_bind;
</script>

可能希望根据应用程序的需要进行清理(例如,确保在尝试绑定之前始终加载框架,或者可以发生解除绑定,或者记住原始链接的任何onclicks),但是是一般事物的形状。

答案 6 :(得分:0)

找出点击了哪个元素的好方法是使用事件委派。如果使用循环(通过document.links或document.getElementsByTagName)将事件侦听器附加到每个元素,则会出现两个问题: - 浏览器有许多要维护的侦听器 - 当您调用循环时,事件仅附加到DOM中的元素;以后动态添加的任何元素都没有事件监听器。

事件委派的一个简单示例:

document.onclick = function(e){
    e = e || window.event;
    var t = e.target || e.srcElement;
    if(t.nodeName=='A'){
        alert( t.href );
    }
}

如果您想在iframe中找到点击链接,只需使用iframe的contentDocument而不是文档。