jQuery:找不到框架的元素

时间:2011-11-29 18:02:59

标签: jquery iframe frame

我们的开发和公司网站的框架层次略有不同。

偶尔我需要在不同的框架中引用一个元素。

不幸的是,我不知道该框架在层次结构中的位置。但我确实知道这是真的。

当我不知道确切的结构时,如何找到框架或特定元素?

澄清 在开发中,它基本上只是一个包含框架的页面。我在框架的上下文中,只是使用window.top.document来获取我想要的文档。

在prod中,嵌套是不同的,window.top.document不起作用,因为它在另外两个框架内。

我无法改变这种结构,它只是我们的应用程序门户的工作方式。

4 个答案:

答案 0 :(得分:6)

如果iframe来自同一个域,则可以通过jQuery轻松访问这些元素

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

关于外国域名有一些例外Here

答案 1 :(得分: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"));
    }

这将首先向上检查,如果不起作用则向下检查

答案 2 :(得分:0)

如果你知道框架的id,你可以使用id选择器和contents()方法来查找iframe中的元素。试试这个

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

答案 3 :(得分: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);