HTMLドキュメントを含むiframeのページがあります。その子ドキュメントからiframeのIDにアクセスする必要がありますが、jQueryでアクセスできません。本質的な構造は私のページ内でこれです:
<div id="ContainingDiv">
<iframe id="ContainingiFrame">
<html>
<head></head>
<body>
</body>
</html>
</iframe>
</div>
私のjavascriptメソッドでは、jQueryセレクターを使用して<body>
タグ内のすべてにアクセスできますが、サイズを変更するためにiframe要素を取得できません。私はいくつかのことを試しましたが、特にiframeが関係している場合(iframeは含まれているページと同じドメインにあります)、jQuery DOMナビゲーションの専門家ではないことは確かです。これを行う方法はありますか?
JQueryはまったく必要ありません。親のボディオブジェクトを取得するには、次のようにします。
var parentBody = window.parent.document.body
コードを実行しているiframeと同じドメインにある場合は、それを取得したら、そのオブジェクトで通常のJavaScriptを使用できます。
window.parent.document.getElementById("ContainingiFrame").style.height = "400px";
またはjQueryを使用:
$("#ContainingiFrame", parentBody).height("400");
サンプルコードを使用して、iframe内からiframeのサイズを変更する方法に関する記事を次に示します。 http://www.pither.com/articles/2010/11/12/resize-iframe-from-within
そして、それ自体のコンテンツに基づいてiframeのサイズを変更することに関する関連する質問/回答: コンテンツに基づいてiframeのサイズを変更する
iframeから親のドキュメントにアクセスするセレクターにパラメーターを追加できます。デフォルトはドキュメントですが、次のようにコンテキストをwindow.parent.documentに変更することを妨げるものはありません。
$('#ContainingiFrame', window.parent.document).whatever();
または、セレクターの前に追加します。
window.parent.$('#ContainingiFrame').whatever();
Iframeに関する情報(クエリの識別子など)がない場合は、次のようにウィンドウの frameElement を使用します。
_var iframe_tag_in_parent_window = window.frameElement;
_
これでiframeタグ自体ができ、JavaScriptで直接操作できます。
プレーンJavaScriptの代わりにjQueryを使用するには、以下を使用します。
_var iframe_in_jquery = jQuery(window.frameElement, window.parent.document);
_
最初の部分(_window.frameElement
_)について話しました。 2番目の部分は、jQueryが要素を見つけてラップするコンテキストです。これは、現在のウィンドウの親ドキュメントです。
たとえば、iframe
タグに一意のIDがある場合、次のことができます。
_var iframe_in_jquery = jQuery(window.frameElement, window.parent.document),
id = iframe_in_jquery.attr("id");
_
これで、JavaScriptコードが実行されているid
の場合、iframe
が識別子になります。
P.S. _window.frameElement
_がnullまたは未定義の場合、iframe
には含まれていません。
P.P.Sは、親ウィンドウでコードを実行するには、jQuery()
の親インスタンスを使用する必要がある場合があることに注意してください。これはwindow.parent.jQuery(...)
を使用して行われます。これは、イベントをtrigger()
しようとした場合に特に当てはまります。
P.P.P.S. frameElement
だけでなく_window.frameElement
_を使用するようにしてください...一部のブラウザーは多少壊れており、完全修飾されていない場合は常に正しいデータにアクセスできるとは限りません(ただし、2016年にその問題は解決される可能性がありますか?)
これを試して:
iframe
:内の要素のサイズを変更します
$('#ContainingiFrame', window.parent.document).find('#someDiv').css('height', '200px');
または単にiframe
:のサイズを変更します
$('#ContainingiFrame', window.parent.document).height('640');
iframe
内に要素の参照があり、その親iframe
を見つける必要がある場合、特に複数のiframeがある場合は、これを見つける方法があります。
var $innerElement;//element inside iframe
var $iframeBody = $innerElement.closest('body');
var $parentIframe = $('iframe').filter(function () {
return $(this).contents().find('body')[0] == $iframeBody[0];
});
これを試して:
$("#ContainingiFrame").contents().find("#someDiv");