2010-07-18 52 views

回答

4

查看http://api.jquery.com/contents/用于访问iframe的内容文档。

一个解决您的问题可能是:

$("iframe#name").contents().find(".fineme").bind("mouseover", function() { alert("Found me"); }); 
+0

有趣,但这似乎不工作? – AnApprentice 2010-07-18 00:47:04

+0

适合我。也许这个类应该是'.findme'而不是'.fineme'? – 2010-07-18 04:05:08

+2

您可能需要将其包装在一张支票中以确保iframe已加载。如果您在加载iframe之前尝试访问内容,您将无法找到它。将它包装在$(“iframe#name”)中。load()。 – naivedeveloper 2011-06-01 17:37:36

1

是啊,这似乎在默认情况下,如果你运行了父窗口的选择也不会发现的iframe中的元素。但是,您可以明确地向jQuery提供上下文以查看iframe内部。要做到这一点

一种方法是:

var iframe = $("#someIframeId"); 
$(".fineme",iframe.get(0).contentDocument).mouseover(function(){alert('hi')}); 

注:如果两个父网站和iframe在同一域中这只会工作。欲了解更多信息,请参阅:http://madskristensen.net/post/Iframe-cross-domain-JavaScript-calls.aspx

+1

有趣,但似乎没有工作? – AnApprentice 2010-07-18 00:46:43

+1

有一点需要注意:为此,iframe必须与页面位于同一个域中。如果他们在不同的领域,我认为浏览器的安全性,我停止工作。 – 2010-07-19 01:01:34

+0

这适用于原生jQuery,但对于jQuery UI对象呢?例如,如果您调用元素上的可调整大小,它将不具有鼠标上下文。您必须单击可调整大小的手柄,然后将鼠标拖到iframe之外,才能响应鼠标移动。 – naivedeveloper 2011-06-01 17:38:48

1

我有一个类似的问题,并找到了适合我的解决方案。试试这个:

document.getElementById('iframe_id').contentWindow.$('.fineme').on(...) 

它适用于任何jQuery的功能,但监听对iFrame的DOM的jQuery的事件。