views:

361

answers:

4

Let me preface this with... I have referenced this question/answers and it seems to contain clues, but i'm still missing the whole picture

http://stackoverflow.com/questions/539504/run-jquery-in-the-context-of-another-frame

Essentially, the structure of the index page is this

<html>
<body>
  <div class="frames-wrap">
      <iframe id="this-iframe" src="location.php">

      </iframe>
  </div>
</body>
</html>

location.php then contains a frameset (ahem, not my idea...) that has two frames that are set up like so...

<frameset cols="350,*">
  <frame src="search.php" id="frame_search" name="search"/>
  <frame src="edit.php" id="frame_edit" name="edit" />
</frameset>  

if i want to manipulate objects between the index page and these elements how would i go about this?

I keep thinking the context should be something similar to window.parent.frames[0].document... what else am i missing?

+1  A: 

I think the link from technicolorenvy has the answer, but the selector has a lesser known second parameter where you can set the context.

Something like this:

var iframeDoc = document.getElementById('myIframe');
iframeDoc = (iframeDoc.contentWindow) ? iframeDoc.contentWindow : (iframeDoc.contentDocument.document) ? iframeDoc.contentDocument.document : iframeDoc.contentDocument;


// From the parent window
$('p', iframeDoc).html('Hello from parent');

http://docs.jquery.com/Core/jQuery#expressioncontext

Ran
+1  A: 

Giving your frames ids that are valid JavaScript identifiers would help, then you could use constructs such as window.top.this_iframe.frame_edit.document as your context.

Neil
thanks for the feedback! however, this is bombing for me. the ids now have underscores rather than ndashes. if i use console.log to see what's happening "behind the scenes" it will return something if i log window.top.this_iframe.document OR if i log window.top.document.getElementById('this_iframe') so it appears that the frame_edit id is not being "seen". any ideas?
technicolorenvy
+1  A: 

Preface: You wont be able to access the iframes contents unless it originates from the same domain.

To select elements in your iframe you could use a jQuery call like this

element = $("#this_iframe").contents().find("#frame_search")

The key is to use the contents() function. See Traversing/contents

mikezter
ahh contents() is indeed awesome, i didn't realize the iframe support that provided... Thanks!
technicolorenvy
would you mind accepting the answer?
mikezter
A: 

These were all helpful. I kept bombing when I was attempting to get past the iframe in the DOM. THis would appear to be from the fact i had code residing in the ready() method, but the frameset that was being called within the iframe was not loaded by the time that had $(document).ready() fired.

Thanks for all the great help and feedback!

technicolorenvy