2011-11-29 13 views
5

I nostri siti di sviluppo e aziendali presentano una gerarchia di frame leggermente diversa.jQuery: ricerca di un elemento, indipendentemente dal frame

Molto raramente ho bisogno di fare riferimento a un elemento in una cornice diversa.

Sfortunatamente, non so dove sarà quella cornice nella gerarchia. Tuttavia, so che è id.

Come posso trovare un frame o l'elemento specifico, quando non conosco la struttura esatta?

Per chiarimenti In dev, è fondamentalmente solo una pagina, contenente una cornice. Sono nel contesto del frame e stavo usando window.top.document per ottenere il documento che volevo.

In prod, il nesting è diverso, window.top.document non funziona, poiché è all'interno di altri due frame.

Non riesco a modificare questa struttura, è proprio come funziona il nostro portale applicativo.

risposta

3

forse si potrebbe provare a percorrere tutti i fotogrammi. o dovrai utilizzare una ricerca in ampiezza o in profondità a seconda di quanto profondo sarà il nesting del frame. passare la radice in origine.

frameSearch(yourElementId,$("frame")); 

function frameSearch(elementId,frames){ 
     if (!(frames)) {return "element not found";} 
     $.each(frames,function(){ 
      var $elementFound = this.find("#"+elementId); 
      if ($elementFound){ 
       return $elementFound; 
      } 
      var newFrames = this.find("frame"); 
      if (newFrames) {frameSearch(elementId,newFrames);} 
     }); 
} 

Non sono sicuro al 100% della correttezza di questo algoritmo ricorsivo, ma questa è l'idea giusta, credo.

EDIT:

se hai bisogno di trovare il genitore più in alto, prova:

var $currentDocument = $("document"); 
    while ($currentDocument.parent()){ 
     if ($currentDocument.find("#"+yourElementId)){ 
       $yourElement = $currentDocument.find("#"+yourElementId); 
       break; 
     } 
     $currentDocument = $currentDocument.parent(); 
    } 

    if (!($yourELement)){ 
     $yourElement = frameSearch(yourElementId,$("frame")); 
    } 

questo controllerà verso l'alto, poi verso il basso, se questo non funziona

0

Se si conosce l'ID del frame, è possibile utilizzare il selettore di id e il metodo contents() per trovare gli elementi all'interno dell'iframe. Prova questo

$("#iframeId").contents().find("elementToFind") 
+0

non credo che questo lavoro per una cornice all'interno di una cornice che è il problema no? – Evan

+0

Credo che funzioni solo scendendo dall'albero, non eseguendo il backup – CaffGeek

+0

Questo cercherà gli elementi all'interno dell'iframe selezionato. – ShankarSangoli

6

Se l'iframe è dallo stesso dominio, gli elementi sono facilmente accessibili tramite jQuery come

$("#frameID").contents().find("#elementID").hide(); 

Ci sono alcune eccezioni Here su dominio straniero:

0

questo ha funzionato per me ...

USERNAME='input#username'; 

    frame_count=window.parent.frames.length; 
    for(f=0;f<frame_count-1;f++){ 
     test_frame=window.parent.frames[f].document.body; 
     if ($(USERNAME, test_frame).length==1) { 
      INPUT_FRAME=f; 
      break; 
     }; 
    }; 

detail_frame=window.parent.frames[INPUT_FRAME].document.body; 

$(USERNAME, detail_frame).val(username); 
Problemi correlati