2012-06-08 84 views
11

我有一個文件,讓我們稱之爲parent-win.html,由domain example.com提供服務。這個文件包含了jquery。一個iframe,我們稱之爲iframe-win.html,嵌入在這個頁面中。 iframe-win.html有一個表單元素,其編號爲form-elem,值爲Hello World!。現在我確實在iframe之後。如何從iframe中的父級使用jquery?

var jQuery = parent.jQuery; 
console.log(jQuery('#form-elem').val()); 

據我有限的JS的知識,我應該看到控制檯Hello World!而是我看到不確定的。現在,我的問題是我需要在iframe中再次加載jquery,還是可以利用已經加載到父窗口中的jquery對象?

請注意,這不是像往常一樣從父級/ iframe訪問iframe /父級內容。

+0

可能重複的[從iframe訪問jQuery庫](http://stackoverflow.com/questions/5481613/access-jquery-library-from-iframe) –

回答

24

在iframe試試這個:

if (typeof(jQuery) == "undefined") { 
    var iframeBody = document.getElementsByTagName("body")[0]; 
    var jQuery = function (selector) { return parent.jQuery(selector, iframeBody); }; 
    var $ = jQuery; 
} 
+0

這就是我一直在尋找的!我剛纔問一位同事是否需要將iframe作爲上下文傳遞給jQuery。感謝Moin! – Kumar

+6

這個答案並不考慮jQuery函數除了字符串選擇器之外可以採用的所有其他參數類型。 – thwd

+0

我發現使用文檔比使用iframebody更好:返回parent.jQuery(選擇器,文檔) – boisvert

1

您需要在iframe中加載jQuery。

編輯:好的,如果幀是不在同一個域,那麼你做重新加載jQuery的。見Access jQuery library from iframe

+0

我知道。但是,如果你在上面給出的例子中使用console.log jQuery,它確實顯示了jQuery對象。此外,我可以從父母使用parent.object()訪問一個對象,那麼爲什麼不jQuery? – Kumar

+0

Thom Smith,閱讀你重新鏈接的答案,如果iframe在不同的域上,你必須在裏面加載jQuery。 – dimention

+0

鏈接到的答案無效,請參閱其評論以獲取詳細信息。 – boisvert

5

這是一個基於莫因的回答更好的解決方案:

if (typeof(jQuery) == "undefined") { 
    window.jQuery = function (selector) { return parent.jQuery(selector, document); }; 
    jQuery = parent.$.extend(jQuery, parent.$); 
    window.$ = jQuery; 
} 

所以我們可以用$的功能,如$不用彷徨, $ .extends等

+0

,也可以在'head'中工作,而Moin的答案必須放在'body'裏面 – cske

相關問題