2011-11-29 11 views
5

पर ध्यान दिए बिना तत्व ढूंढना हमारे देव और कॉर्पोरेट साइटों के पास थोड़ा अलग फ्रेम पदानुक्रम है।jQuery: फ्रेम

बहुत बार मुझे एक अलग फ्रेम में तत्व को संदर्भित करने की आवश्यकता होती है।

दुर्भाग्यवश, मुझे नहीं पता कि यह फ्रेम पदानुक्रम में कहां होगा। हालांकि मुझे पता है कि यह आईडी है।

मुझे फ्रेम या विशिष्ट तत्व कैसे मिल सकता है, जब मुझे सटीक संरचना नहीं पता?

स्पष्टीकरण देव में, यह मूल रूप से केवल एक पृष्ठ है, जिसमें एक फ्रेम है। मैं फ्रेम के संदर्भ में हूं, और मैं चाहता था कि दस्तावेज़ प्राप्त करने के लिए window.top.document का उपयोग कर रहा था।

प्रोड में, घोंसला अलग है, window.top.document काम नहीं करता है, क्योंकि यह दो अन्य फ्रेम के अंदर है।

मैं इस संरचना को नहीं बदल सकता, यह सिर्फ हमारे आवेदन पोर्टल पर काम करता है।

उत्तर

3

शायद आप सभी फ्रेमों को पार करने का प्रयास कर सकते हैं। फ्रेम घोंसला कितना गहरा होगा इसके आधार पर आपको या तो चौड़ाई-पहली या गहराई-पहली खोज का उपयोग करने की आवश्यकता होगी। इसे मूल रूप से रूट पास करें।

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);} 
     }); 
} 

मैं 100% इस पुनरावर्ती एल्गोरिदम के सही होने के बारे में सुनिश्चित नहीं कर रहा हूँ, लेकिन यह सही विचार मेरा मानना ​​है कि है।

संपादित करें:

यदि आप सर्वोच्च माता पिता को खोजने के लिए की जरूरत है, की कोशिश:

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

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

इस ऊपर की तरफ पहला, तो नीचे की ओर की जाँच करेगा कि अगर

0

यदि आप फ्रेम की आईडी जानते हैं तो आप आईफ़्रेम के तत्वों को खोजने के लिए आईडी चयनकर्ता और contents() विधि का उपयोग कर सकते हैं। इस

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

मुझे नहीं लगता कि यह एक फ्रेम जो समस्या है कोई भीतर एक फ्रेम के लिए काम करेंगे करते हैं? – Evan

+0

मुझे विश्वास है कि यह केवल पेड़ नीचे जा रहा है, – CaffGeek

+0

का बैक अप नहीं लेगा यह चयनित आईफ्रेम के तत्वों की तलाश करेगा। – ShankarSangoli

6

काम नहीं करता है, तो आइफ्रेम उसी डोमेन से, तत्वों को jQuery के माध्यम से आसानी से सुलभ किया जा सकता है

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

कुछ अपवादों Here विदेशी डोमेन के बारे में कर रहे हैं:

0

यह मेरे लिए काम किया ...

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);