2010-07-18 51 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的事件。