jQuery:找不到框架的元素

Caf*_*eek 5 iframe jquery frame

我们的开发和企业站点的框架层次略有不同.

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

不幸的是,我不知道该框架在层次结构中的位置.但我确实知道它的身份.

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

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

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

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

Maz*_*rzi 6

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

$("#frameID").contents().find("#elementID").hide();
Run Code Online (Sandbox Code Playgroud)

有一些例外这里关于外国域名:


Eva*_*van 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);}
      });
}
Run Code Online (Sandbox Code Playgroud)

我不能 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"));
    }
Run Code Online (Sandbox Code Playgroud)

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