0

我的主页包含框架集中的多个框架。其中一个框架是带有按钮的工具栏,我希望能够按下该工具栏上的一个按钮,它将隐藏主页上的一个框架。

我已经在工具栏框架内尝试了以下操作,但它不起作用......

$(document).parent.$("#other_frame").hide("slow");

我对 jQuery 很陌生,在网上搜索后,我几乎迷路了。

感谢您的帮助。

编辑:我的完整主页

<frameset frameborder="0"  rows="70, *">
   <frame name="toolbar" src="toolbar.html" marginwidth="8px" marginheight="8px" />
   <frameset id="lineNumFrameset" frameborder="0" cols="50, *">
      <frameset rows="*, 16">
      <frame id="other_frame" name="lineNum" src="lineNum.html" marginwidth="8px" marginheight="8px" align="top" />
      </frameset>

      <frame name="editor" src="editor.html" marginwidth="8px" marginheight="8px" />
   </frameset>
</frameset>
4

5 回答 5

2

就我对事物的理解而言,您需要执行隐藏在 div 上的操作。基本上,无论您试图影响什么,都需要响应 css display 属性。如果您必须使用框架,我强烈建议您改用 div,那么您将需要编写一些 jQuery 来实际从 DOM 中删除框架,而不是仅仅试图隐藏它。

于 2009-11-24T17:43:42.027 回答
2
$(document).parent.$("#other_frame").hide("slow");

啊。这里有几个问题。首先是parent()调用函数。但是,jQuery 不能使用parent(). 要向上导航框架,您需要以下window.parent属性:

window.parent.$('#other_frame').hide('slow');

但要使其正常工作,您需要在父文档中加载一份 jQuery 副本,以便您可以调用它的$. (从另一个文档的副本编写一个文档的脚本$通常不起作用;jQuery 并不是专门为跨框架脚本而设计的。)

它不起作用的最后一个原因是您不能真正编写/样式框架集页面。浏览器可能会忽略这些特殊页面中的脚本,并且许多 CSS 属性在框架上不起作用(包括display: nonejQueryhide()使用的)。

尝试使用iframes 而不是frames 以获得更易于编写脚本的页面。(不过,让框架样式的layout: fixed东西在 IE6 中工作会很痛苦。)或者,如果您可以管理它,那么在一个文档中完成所有操作会更易于管理。跨框架脚本有许多微妙而烦人的陷阱。

于 2009-11-24T19:21:02.470 回答
2

我这样做了,没有 jquery,我在调用 go() 函数的主框架中有一个“链接”。go 函数展开或折叠“FrameSetMain”的第一帧。我在 ie8 和 firefox 3.6 上测试过。

var oggFS = parent.document.getElementById("FrameSetMain");
var startingWidth = oggFS.cols
var w = 0;
function collapse(min) { 
    s = oggFS.cols.split(",");
    w = parseInt(parseFloat(s[0]) / 2);
    oggFS.cols = w + ",8,*";
    if (w>min) { setTimeout("collapse("+min+")",50); } else {
        oggFS.cols = min + ",8,*";
        document.getElementById("link").title = "Show menu";
    }
}
function expand(max) { 
    s = oggFS.cols.split(",");
    if (s[0]==0) s[0]=5;
    w = parseInt(parseFloat(s[0]) * 2);
    oggFS.cols = w + ",8,*";
    if (w<max) { setTimeout("expand("+max+")",50); } else {
        oggFS.cols = max + ",8,*";
        document.getElementById("link").title = "Hide menu";
    }
}
function go(){ if (oggFS.cols != "0,8,*") { collapse(0); } else { s = startingWidth.split(","); expand(s[0]); } }
于 2010-05-18T14:02:31.160 回答
1

您可以使用以下内容修改框架集:

 //hide
        var orig = $('#myFrameSet', top.document).attr('rows');
        $('#myFrameSet', top.document).attr({'rows':'0,*'})

        ....

 //show
        $('#myFrameSet', top.document).attr({'rows':orig})
        orig = null;

您也可以对 cols 执行此操作。

于 2011-01-31T19:49:47.283 回答
1

试试这个:</p>

if(window.parent.document.getElementById("myFrameset").cols!="40px,*"){
                $('#left-title-txt').hide();
                window.parent.document.getElementById("myFrameset").cols="40px,*";
                $(this).css('background-image','url(img/openleft.png)');
            }else{
                $('#left-title-txt').show();
                window.parent.document.getElementById("myFrameset").cols="20%,80%";
                $(this).css('background-image','url(img/hideleft.png)');
            }
于 2011-12-29T03:30:07.087 回答