Cómo acceder a los contenidos del marco (no del marco) de jQuery

Tengo 2 marcos en una página como esta ( home.html )

    

y luego en un marco ( treeStatus.html ) tengo algo así como

  
Status bar for Tree

Quiero desde la ventana superior manipular el div ubicado en el marco secundario a través de jquery (por ejemplo, mostrar y ocultar).

He visto varias preguntas como esta y sugieren lo siguiente

 $(document).ready(function(){ $('#treeStatus').contents().find("#statusText").hide(); }); 

No sé si esto funciona con iframes, pero en mi caso, donde tengo marcos simples, parece que no funciona. El código se coloca dentro de home.html

Aquí hay algunos resultados de la consola Firebug

 >>> $('#treeStatus') [frame#treeStatus] >>> $('#treeStatus').contents() [] >>> $('#treeStatus').children() [] 

Entonces, ¿cómo puedo acceder a los elementos del marco desde el marco superior? ¿Me estoy perdiendo de algo?

Responder

Después de combinar ambas respuestas aquí, la forma correcta es

 $('#statusText',top.frames["treeStatus"].document).hide(); 

Para que esto funcione, el marco debe tener el atributo de nombre aparte del ID, así:

     

Podrías agarrar el Marco y Div que deseas manipular y pasarlo a una variable.

 var statusText = top.frames["treeStatus"].document.getElementById('statusText'); 

Entonces puedes hacer lo que quieras a través de jQuery.

 $(statusText).whatever(); 

Aunque a veces no puedes evitar tener que usar marcos, ten en cuenta que la etiqueta está obsoleta en HTML5. Si alguna vez planea pasar a HTML5, tendrá que usar iFrames.

Debe proporcionar una referencia al marco al que debe acceder:

 $("some selector", top.frames["treeStatus"])) 

Tengo marcos nesteds. En mi caso, para que funcione, utilicé el comando:

 var statusText = top.document.getElementById("treeStatus").contentDocument.getElementById("statusText"); 

Entonces, como Charles ya respondió, puedes hacer lo que quieras a través de jQuery:

 $(statusText).whatever(); 

https://jamesmccaffrey.wordpress.com/2009/07/30/cross-frame-access-with-jquery/

  $(document).ready(function(){ $("#Button1").click(function(){ $(parent.rightFrame.document).contents().find('#TextBox1').val('Hello from left frame!'); }); }); 

Pero utilicé:

  $.post("content_right.php",{id:id},function(data) $(parent.frames["content_right"].document.body).html(data) ; }); 

Para una solución de jquery pura (que no requiere top.frames etc.), lo siguiente parece funcionar:

 $('some selector for item from frame' ,$('frame selector')[0].contentDocument) 

Esto tiene la ventaja de que funciona para marcos nesteds:

 $('inner frame item selector', $('inner frame selector', $('outer frame selector')[0].contentDocument)[0].contentDocument)