Caf*_*eek 5 iframe jquery frame
我们的开发和企业站点的框架层次略有不同.
偶尔我需要在不同的框架中引用一个元素.
不幸的是,我不知道该框架在层次结构中的位置.但我确实知道它的身份.
当我不知道确切的结构时,如何找到框架或特定元素?
为了澄清在开发中,它基本上只是一个包含框架的页面.我在框架的上下文中,只是使用window.top.document来获取我想要的文档.
在prod中,嵌套是不同的,window.top.document不起作用,因为它在另外两个框架内.
我无法改变这种结构,它只是我们的应用程序门户的工作方式.
如果iframe来自同一个域,则可以通过jQuery轻松访问这些元素
$("#frameID").contents().find("#elementID").hide();
Run Code Online (Sandbox Code Playgroud)
有一些例外这里关于外国域名:
也许你可以尝试遍历所有框架。您将需要使用广度优先或深度优先搜索,具体取决于框架嵌套的深度。最初将根传递给它。
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)
这将首先向上检查,如果不起作用,则向下检查