jqueryを使用してiFrame親ページにアクセスする方法


267

iframeがあり、親要素にアクセスするために、次のコードを実装しました。

window.parent.document.getElementById('parentPrice').innerHTML

jqueryを使用して同じ結果を得るにはどうすればよいですか?
更新:またはjqueryを使用してiFrame親ページにアクセスする方法?


回答:


489

iFrameの親で検索するには、次を使用します。

$('#parentPrice', window.parent.document).html();

$()ラッパーの2番目のパラメーターは、検索するコンテキストです。これはデフォルトでドキュメントになります。


18
クール-あなたが感謝する前に、あなたは感謝を認めました。StackOverflowにタイムゾーンの問題があるかもしれませんか?
belugabob

21
次のこともできます:$(window.parent.document).find( "#parentPrice")。html();
jhorback

@belugabobウィザードのせいです。
エリックエスコベド

1
window.openでwindoidを起動した人は、古いJS標準のwindow.opener.documentを忘れないでください。$( "#someDiv"、window.opener.document)は動作します。
jjohn 2013年

2
これは、iframeのソースにjQueryがロードされている場合にのみ機能します。私の経験では、iframeソースにはjQueryがありませんが、親のjQuery関数の1つを呼び出す必要がし​​ばしば必要になります。これを行うには、window.document。$( "#parentPrice")。html()を使用します。これが、アルバロG.ヴィカリオが投稿した答えです。
David Kinkead 2014

39

jqueryを使用してiFrame親ページにアクセスする方法

window.parent.document。

jQueryはJavaScriptを基盤としたライブラリであり、JavaScriptを完全に置き換えるものではありません。最後のJavaScript式をすべて$を含むものに置き換える必要はありません。


6
+1。jQueryは素晴らしいですが、単純な問題に対する答えの多くは「jQueryを使用する」ようです。とにかくライブラリをロードしている場合は問題ありませんが、1つのタスクでロードしないでください。また、人々はJSのパフォーマンスについて心配しているようで、JSの上にAPIを使用して、APIなしで簡単に(そしておそらくはより高速に)処理を実行します。
Grant Wagner、

1
@Grant私はブラウザー内でjQueryがネイティブコードになることを夢見ています。
Dan Blows、

3
@ブロースキー:それは私の悪夢です!jQueryには、公式のAPIに組み込むにはまったく不適切な、非常に複雑で壊れやすい「私が言っていることを行う」コードがたくさん含まれています。
ボビンス、2011

1
@bobince:明らかに、すべてのJavaScriptを常に jQueryに置き換える必要があります。ベーコンのようなものです。少ないほど良いという状況はありません。;)
MW。

2
OPにはすでにwindow.parent.documentが含まれていたため、これは何の答えにもなりませんでした。そして、セレクターロジックが要素のIDよりもはるかに複雑で、jQueryが非常に便利な状況を想像してください。質問は「フランス語で「こんにちは」はどうやって言うの?」この答えは「ドイツ語を話す」です。
grantwparks 2014年

13

親ドキュメントでjQueryインスタンスを見つける必要がある場合(たとえば、プラグインによって提供されるユーティリティ関数を呼び出す場合)、次の構文のいずれかを使用します。

  • window.parent.$
  • window.parent.jQuery

例:

window.parent.$.modal.close();

jQueryはwindowオブジェクトにアタッチされ、それwindow.parentがそうです。


ユーザーコントロールのようにiframeを使用しています。これにより、きれいに保つことができます。
Dan Randolph、2015

11

次のwindow.parentように使用すると、iframe内から親ウィンドウの要素にアクセスできます。

// using jquery    
window.parent.$("#element_id");

これは次と同じです:

// pure javascript
window.parent.document.getElementById("element_id");

ネストされたiframeが複数あり、最上位のiframeにアクセスしたい場合は、次のwindow.topように使用できます。

// using jquery
window.top.$("#element_id");

これは次と同じです:

// pure javascript
window.top.document.getElementById("element_id");

7

親ウィンドウに置く:

<script>
function ifDoneChildFrame(val)
{
   $('#parentPrice').html(val);
}
</script>

そしてiframe srcファイルに入れます:

<script>window.parent.ifDoneChildFrame('Your value here');</script>

5

ええ、それは私にも有効です。

注:window.parent.documentを使用する必要があります

    $("button", window.parent.document).click(function()
    {
        alert("Functionality defined by def");
    });

5

それは少しねじれで私のために働いています。私の場合、POPUP JSからPARENT WINDOWフォームに値を入力する必要があります。

だから私は使用しました $('#ee_id',window.opener.document).val(eeID);

優れた!!!


3

ここでゲームに少し遅れるかもしれませんが、この素晴らしいjQueryプラグインhttps://github.com/mkdynamic/jquery-popupwindowを発見しました。これは基本的にonUnloadコールバックイベントを使用するため、基本的には子ウィンドウのクローズをリッスンし、その時点で必要な処理を実行します。そのため、親に戻すために子ウィンドウにJSを書き込む必要はありません。


1

これらを行うには複数の方法があります。

I)メインの親を直接取得します。

エクサのために。子ページをiframeに置き換えたい

var link = '<%=Page.ResolveUrl("~/Home/SubscribeReport")%>';
top.location.replace(link);

ここでtop.locationは直接親を取得します。

II)親を1つずつ取得します。

var element = $('.iframe:visible', window.parent.document);

ここに複数のiframeがある場合は、アクティブまたは可視のiframeを指定します。

また、親を増やすために、このようにすることもできます。

var masterParent = element.parent().parent().parent()

III)識別子で親を取得します。

var myWindow = window.top.$("#Identifier")
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.