web-dev-qa-db-ja.com

jQueryを使用してフレーム内の要素を取得する

フレームの内側にある要素にアクセスしようとしていますが、これまでのところうまくいきません。私はここでstackoverflowとjQueryのドキュメントで多くの例を読みましたが、これまでに見た例はすべて、従来のフレームとは異なる動作をするiFrameを参照しています。私のページ構造は、実際のコンテンツが削除された以下のとおりです。

<html>
<head></head>
<frameset>
<frame name="Menu"><html><body>
    <!--Menu contents-->
</body></html></frame>

<frameset>
<frame name="SettingsTree"><html><body>
    <!--Setting options-->
</body></html></frame>
<frame name="SettingsGrid" id="SettingsGrid"><html><body>
    <div id="findthis"></div>
    <!--Setting grid values-->
</body></html></frame>
</frameset>

</frameset>
</html>

IFrame内で「findthis」のコンテンツを取得する方法は、

$('#SettingsGrid').contents().find('#findthis')

ただし、これは何も返しません。 $( '#SettingsGrid')オブジェクトは1の長さで存在し、予想されるすべてのhtmlです。ただし、そのオブジェクトで.contents()を呼び出すと、何も返されません。これがDOMに適切にロードされていないためか、他に問題があるかどうかはわかりません。

18
Jeff Fol

これを試して:

$('#findthis', window.parent.frames[0].document)

またはトップレベルから:

$('#findthis', top.window.frames[0].document)

前の質問/回答を参照: 別のフレームのコンテキストでJQueryを実行

41
dgilland

フレームに名前とIDがある場合、これは私にとってはうまくいきました:

$('#frame_id',top.frames["frame_name"].document) ...
1
James Drinkard

JQuery 1.11.1を使用したIE8/IE11エンタープライズモードでの私の最も効果的なソリューションは次のとおりです。

$('#findthis', $('#SettingsGrid')[0].contentWindow.document)
1
DoronG

私にとってこれを行うための良い方法は、クラスごとにフレームを見つけることであり、jqueryのprop()メソッドとcontentwindowを使用することでした。残念ながら、このフレームでは、タスクを実行する関数によって宣言する必要があります。 findAndsubmitForms()メソッド。

親ウィンドウ:

$('.frameClass or #id or so').prop('contentWindow').findAndSubmitForms();

子ウィンドウ(フレーム):

function findAndSubmitForms(){
    $('form').submit();
    }

フレーム内でそのようなメソッドを宣言することができない場合は、当然、次のように定義することで実行できます。

$('.frameClass').prop('contentWindow').findAndSubmitForms=function(){...};

そして、目的の関数を呼び出す:d

よい一日をお過ごしください。画面をご覧ください。D

0
Karol

$('#findthis', $('#SettingsGrid'))を試しましたか?

外側のjquery内の2番目の引数は、最初の引数によって参照が検索されるコンテキストです。 2番目の引数を指定しない場合、デフォルトでルートになります。

0
Fortunato