2011-01-05 23 views
9

Estoy tratando de usar jquery para encontrar un div dentro de un iframe. ¿Hay una manera mejor que la que estoy usando a continuación?Cómo encontrar un div dentro de un iframe

$('#Iframe').contents().find('#MyDiv') 

function atmslidein(){ 
    $("#customer").ready(function(){   
     if($('#customer').attr('src')=='ATM.html') 
     { 
      $('#customer').contents().find('.atm_page').css('margin-left', '270px'); 
      $('#customer').contents().find('.tele').css('display', 'none'); 
     } 
    }) 
} 

que he probado casi una semana para hacer este trabajo:

$('#Iframe').contents().find('#MyDiv') 

Por eso he intentado otra forma de acceder div del marco flotante.


De todos modos he encontrado algo que el documento marco flotante debe tener y sólo entonces la función anterior funciona correctamente:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 

Mi problema se resuelve, gracias. ¿Pero alguien podría explicar por qué es necesario?

+3

¿Qué pasa con esa manera ? – lonesomeday

+0

¿Por qué no '$ ('# IFrame #MyDiv')'? –

+0

@Polybos Es un documento diferente, por lo que no se encontrará con ese selector. – lonesomeday

Respuesta

13

No creo que jQuery pueda acceder al contenido de ContentWindow/Document de esa manera. En el pasado, que he tenido que hacer esto:

$('#iframe').each(function() { 
    $('#MyDiv', this.contentWindow.document||this.contentDocument); 
}); 

**: se requiere el this.contentWindow||this.contentDocument para trabajar correctamente en IE y la mayoría de otros navegadores. Una vez que obtenga la ventana de contenido, debe seleccionar el documento. Luego puede usar jQuery para manipular o recorrer el DOM, pero solo si la fuente del iframe está en el mismo dominio.

** Actualizado para corregir el error donde no especificamos el documento después de obtener el contentWindow/Document.

+1

Eso debería ser 'this.contentWindow.document', creo. – lonesomeday

+0

Tienes razón, gracias. – HackedByChinese

+0

gracias por su solución. pero no funcionaba en mycase – rajaishbt

4

Esto sólo funciona si la fuente de marco flotante está en el mismo dominio que la página, si no el navegador no permitirá que por razones de seguridad

-1

contexto de uso del selector:

var frame = $('#frame_id'); 
var div = $('#mydiv', frame); 
+3

jQuery no puede atravesar el documento de contenido de un iframe directamente, por lo que esto no funcionará. – HackedByChinese