【问题标题】:Checking to see if a frame exists with jQuery使用 jQuery 检查框架是否存在
【发布时间】:2009-08-25 19:16:33
【问题描述】:

我发现我可以做到以下几点:

if($('#notice', parent.frames['header'].document).length>0) { alert("It is here!"); }

检查另一个框架中的项目。
有没有办法找出框架的存在?具体来说,我想看看 parent.frames['header'].document 是否存在。

有可靠的方法吗?

更新: 这是我的框架集代码:

<frameset rows="104,*,22" frameborder="NO" border="0" framespacing="0">
    <frame src="header.php" id="header" name="header" scrolling="no" title="Header and Menu" noresize>
    <frame src="main.php" title="Main content" name="main">
    <frame src="footer.php" name="footer" title="Footer" scrolling="NO" noresize>
</frameset>

我正在努力确保我可以访问位于“标题”内的 div。 缺点是,在某些情况下,main 会被另一个框架集替换。

【问题讨论】:

    标签: javascript jquery


    【解决方案1】:

    如果你想知道一个元素是否存在,你必须检查长度属性,见jQuery FAQ

    if ($('#myFrame').length) {
      alert('#myFrame exists');
    }
    

    在你的情况下,我认为你想要:

    if ($('frame[name=header]', parent).length) {
      alert('frame exists');
    }
    

    为什么要检查长度属性?

    因为如果您将一个不匹配任何内容的选择器传递给 jQuery,则返回的结果是一个 jQuery 对象,不是假值(null、undefined、0 或 false),在 if statement 中评估条件为布尔值,并且始终将非“假”值评估为真:

    if ($('#nonExisting')) {
      alert('always true');
    }
    
    // because 
    !!$('#nonExisting') == true;  // and
    !!'hello' == true;
    !!0 == false;
    

    我以!! 为例,说明了将任何表达式转换为其等效布尔值的简单方法,if 语句在幕后做了什么...

    编辑:查看您的框架集标记,并假设您要检查主页上是否存在标题框架,您可以通过以下方式轻松完成:

     if (parent.header !== undefined) {
       // frame exists
     }
    

    或者简单地说:

     if (parent.header) {
       // frame exists
     }
    

    检查这个例子:

    【讨论】:

    • 我试过你的第二个例子 if ($('frame[name=header]', parent).length) { 这似乎对我不起作用。有什么建议吗?
    【解决方案2】:

    检查选择器:

    if ($("#myFrame").length) alert("It exists!");
    

    【讨论】:

    • 他这样做是为了框架内的一个元素,而不是框架本身。你到底为什么要因此而否决我?这完全不相关。
    • 他们赞成,因为我的例子有效。在选择器查找帧时检查选择器的长度是一个有效的选项。
    • @Josh,我正在检查 $("#myFrame") 的长度是否为零。那是为了框架本身。 OP 正在检查 $("#myFrame") 中元素的长度,这是完全不同的。我编辑提供了一个更简单的示例,这是完全可以接受的。
    • $("#myFrame").length;$("#notice", $("#myFrame")).length;
    • 拥有像 Josh 这样的赞成票:反对票比率,他更适合在博客或论坛上发帖,而不是成为一个势利小人。
    猜你喜欢
    • 2011-10-09
    • 2019-05-22
    • 2021-01-07
    • 1970-01-01
    • 2013-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-13
    相关资源
    最近更新 更多